Академический Документы
Профессиональный Документы
Культура Документы
Contenido [ocultar]
o
0.0.1 Metas
1 Usando OpenCV con imágenes
o 1.1 Leer una imagen
o 1.2 Mostrar una imagen
o 1.3 Guarda una imagen
o 1.4 Resumiendo todo
o 1.5 Usando de Matplotlib
Metas
Aquí aprenderás cómo leer una imagen, cómo mostrarla y cómo guardarla
de nuevo
Aprenderás para que sirven las siguientes
funciones: cv2.imread (), cv2.imshow (), cv2.imwrite ()
Opcionalmente, aprenderás cómo mostrar imágenes con Matplotlib
Nota
En lugar de estos tres indicadores (o banderas), simplemente puedes pasar
números enteros, específicamente 1, 0 o -1, respectivamente.
1 import numpy as np
2 import cv2
3 # Load an color image in grayscale
4 img = cv2.imread('58-aprenderpython.jpg',0)
cv2.imshow('image',img)
5
Advertencia
Incluso si la ruta de la imagen está mal, no lanzara ningún error,
pero print img dará como resultado None
1 cv2.imshow('image',img)
2 cv2.waitKey(0)
3 cv2.destroyAllWindows()
Nota
Hay un caso especial en que puedes crear una ventana y cargar la imagen
posteriormente. En ese caso, puedes especificar si la ventana es redimensionable
o no. Esto se realiza con la función cv2.namedWindow(). Por defecto, el indicador
(o bandera) es cv2.WINDOW_AUTOSIZE. Pero si se especifica la que el indicador
sea cv2.WINDOW_NORMAL, puedes cambiar el tamaño de la ventana. Esto será
útil cuando las dimensiones de la imagen sean muy grandes y se añada una barra
de seguimiento (o un scroll).
Ve el siguiente código:
1 cv2.namedWindow('image', cv2.WINDOW_NORMAL)
2 cv2.imshow('image',img)
3 cv2.waitKey(0)
4 cv2.destroyAllWindows()
Guarda una imagen
Utiliza la función cv2.imwrite () para guardar una imagen.
El primer argumento es el nombre del archivo y el segundo argumento es la
imagen que deseas guardar.
1 cv2.imwrite('deepgris.png',img)
Resumiendo todo
A continuación, el programa carga una imagen en escala de grises, la muestra,
guarda la imagen si presionas ‘s’ y termina su ejecución, o simplemente termina
sin guardar si presionas la tecla ESC.
1
2 import numpy as np
import cv2
3
4 img = cv2.imread('58-aprenderpython.jpg',0)
5 cv2.imshow('image',img)
6 k = cv2.waitKey(0)
7 if k == 27: # wait for ESC key to exit
8 cv2.destroyAllWindows()
elif k == ord('s'): # wait for 's' key to save and exit
9 cv2.imwrite('deepgray.jpg',img)
10 cv2.destroyAllWindows()
11
Advertencia
Si está utilizando una máquina de 64 bits, tendrás que modificar la linea k =
cv2.waitKey (0) de la siguiente manera: k = cv2.waitKey (0) & 0xFF
Usando de Matplotlib
Matplotlib es una biblioteca para gráficar en Python que te ofrece una amplia
variedad de métodos para plotear. Los verás en los próximos artículos. Aquí,
aprenderás a mostrar una imagen con Matplotlib. Puede ampliar las imágenes,
guardarlas, etc utilizando Matplotlib.
1
import numpy as np
2 import cv2
3 from matplotlib import pyplot as plt
4
5 img = cv2.imread('58-aprenderpython.jpg',0)
6 plt.imshow(img, cmap = 'gray', interpolation = 'bicubic')
plt.xticks([]), plt.yticks([]) # to hide tick values on X and Y axis
7
plt.show()
8
Véase también
Muchas opciones de ploteo están disponibles en Matplotlib. Consulta la
documentación Matplotlib para obtener más detalles. Algunos, los veremos en el
camino.
Advertencia
La imagen a color cargada por OpenCV está en modo BGR. Pero Matplotlib se
muestra en modo RGB. Por lo tanto, las imágenes a color no se mostrarán
correctamente en Matplotlib si se lee la imagen con OpenCV. Por favor revisa los
ejercicios para más detalles.
1
2 import numpy as np
3 import cv2
4 cap = cv2.VideoCapture(0)
5
while(True):
6
# Captura video cuadro a cuadro
7 ret, frame = cap.read()
8 # Nuestras operaciones sobre los cuadros se hacen aqui
9 gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
10 # Muestra el cuadro resultante
cv2.imshow('frame',gray)
11 if cv2.waitKey(1) & 0xFF == ord('q'):
12 break
13
14 # Cuando todo está listo, se libera la captura
15 cap.release()
16 cv2.destroyAllWindows()
17
Nota
Si obtienes un error, asegúrate de que la cámara esta funcionando correctamente
con cualquier otra aplicación.
1
2 import numpy as np
import cv2
3
cap = cv2.VideoCapture('vtest.avi')
4 while(cap.isOpened()):
5 ret, frame = cap.read()
6 gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
7 cv2.imshow('frame',gray)
if cv2.waitKey(1) & 0xFF == ord('q'):
8 break
9 cap.release()
10 cv2.destroyAllWindows()
11
Nota
Asegúrate de que las versiones adecuadas de ffmpeg o gstreamer estén
instaladas. A veces, es un dolor de cabeza para trabajar con Capturas de Video,
principalmente debido a una instalación incorrecta de ffmpeg / gstreamer.
Guardando un video
Supongamos que queremos guardar un vídeo que hemos previamente capturado y
procesado cuadro por cuadro. Para el caso de las imágenes, esto es muy simple, sólo
necesitamos usar cv2.imwrite(). En el caso de los vídeos, sin embargo, se requeire un poco
más de trabajo.
Para esto crearemos un objeto VideoWriter. Primero, debemos especificar el nombre que
queremos dar al fichero (ej: output.avi). Luego tenemos que especificar el
código FourCC (ver detalles más abajo), el número de cuadros por segundo (fps) y el
tamaño de cuadro. El último argumento que debemos pasarle es la bandera isColor. Si es
verdadero, el codificador espera cuadros a color, de lo contrario trabaja con escala de
grises.
FourCC es un código de 4-bytes usado para especificar el códec del vídeo. Una lista de los
diferentes códigos disponibles se puede encontrar en fourcc.org. Estos códigos son
dependientes de la plataforma que estés utilizando, con lo cual, en dependencia del sistema
operativo que estés usando puede que algunos te funcionen y otros no. En el ejemplo que
mostramos más abajo, que ha sido corrido sobre Windows 10, hemos utilizado DIVX.
El código FourCC se puede pasar como cv2.VideoWriter_fourcc(‘M’, ‘J’, ‘P’, ‘G’) o
cv2.VideoWriter_fourcc(*’MJPG) para el códec MJPG.
A continuación se muestra un código que captura vídeo de una cámara, invierte cada
cuadro en la dirección vertical y lo guarda.
import numpy as np
1 import cv2
2
3 cap = cv2.VideoCapture(0)
4
5 # Define el codec y crea el objeto VideoWriter
6 fourcc = cv2.VideoWriter_fourcc(*'DIVX')
out = cv2.VideoWriter('output.avi',fourcc, 20.0, (640,480))
7
8 while(cap.isOpened()):
9 ret, frame = cap.read()
10 if ret==True:
11 frame = cv2.flip(frame,0) #invierte el cuadro
12
# escribe el cuadro invertido
13 out.write(frame)
14 cv2.imshow('frame',frame)
15 if cv2.waitKey(1) & 0xFF == ord('q'):
16 break
17 else:
break
18
19 #Libera todo si la tarea ha terminado
20 cap.release()
21 out.release()
22 cv2.destroyAllWindows()
23
24
25
26