Blog
Empezando con imágenes
- Publicado por: Rafael Fernandez
- Categoría: Blog OpenCV Procesamiento de Imagenes

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
Usando OpenCV con imágenes
Leer una imagen
Utiliza la función cv2.imread() para leer una imagen. La imagen debe estar en el directorio de trabajo o se ha de señalar una ruta absoluta a la imagen.
El segundo argumento es un indicador (o bandera) que especifica la forma en que se debe leer la imagen.
- cv2.IMREAD_COLOR: carga una imagen de color. Cualquier transparencia de la imagen será ignorada. Es el indicador (o bandera) predeterminado.
- cv2.IMREAD_GRAYSCALE: carga la imagen en modo de escala de grises
- cv2.IMREAD_UNCHANGED: carga la imagen como sin alteraciones incluyendo el canal alfa
aaaa
Mira el siguiente código:
import numpy as np import cv2 # Load an color image in grayscale img = cv2.imread('58-aprenderpython.jpg',0) cv2.imshow('image',img)
a
Mostrar una imagen
Utiliza la función cv2.imshow() para mostrar una imagen en una ventana. La ventana se ajusta automáticamente al tamaño de la imagen.
El primer argumento es un nombre de ventana el cual es una cadena (tipo de dato string). El segundo argumento es nuestra imagen. Puedes crear tantas ventanas como desees, pero con nombres diferentes de ventana.
cv2.imshow('image',img) cv2.waitKey(0) cv2.destroyAllWindows()
cv2.waitKey () es una función de enlace con el teclado. Su argumento es tiempo en milisegundos. La función espera durante milisegundos especificados que suceda cualquier evento de teclado. Si presionas cualquier tecla en ese momento, el programa continúa. Si se pasa el valor 0, la esperad del evento es indefinida hasta que se presione una tecla. También se puede configurar para detectar pulsaciones de teclas específicas, por ejemplo, si se presiona la tecla a tecla, etc, lo cual veremos más adelante.
cv2.destroyAllWindows() Esta función destruye todas las ventanas que hemos creado. Si deseas destruir una ventana específica, utilice la función de cv2.destroyWindow () donde se pasa el nombre de la ventana a eliminar como argumento.
Ve el siguiente código:
cv2.namedWindow('image', cv2.WINDOW_NORMAL) cv2.imshow('image',img) cv2.waitKey(0) 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.
cv2.imwrite('deepgris.png',img)
Esto guardará la imagen en formato PNG en el directorio de trabajo.
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.
import numpy as np import cv2 img = cv2.imread('58-aprenderpython.jpg',0) cv2.imshow('image',img) k = cv2.waitKey(0) if k == 27: # wait for ESC key to exit cv2.destroyAllWindows() elif k == ord('s'): # wait for 's' key to save and exit cv2.imwrite('deepgray.jpg',img) cv2.destroyAllWindows()
⚠ 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
a
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.
import numpy as np import cv2 from matplotlib import pyplot as plt img = cv2.imread('58-aprenderpython.jpg',0) plt.imshow(img, cmap = 'gray', interpolation = 'bicubic') plt.xticks([]), plt.yticks([]) # to hide tick values on X and Y axis plt.show()
? 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.
¡Felicitaciones por terminar esta lección! Si has llegado hasta aquí tienes los conocimientos básicos para el manejo de imágenes con OpenCV. Te invitamos a participar en nuestro Curso Python de OpenCV:
[…] ➡ Empezando con imágenes […]
si la imagen no se muestra???
Hola Juan pablo, se debería de mostrar ¿que error te sale? gracias por comentar
Buenas tardes,
He intentado leer la imagen y me sale esto:
Que error es?
runfile(‘C:/Users/delphineeeee/.spyder-py3/temp.py’, wdir=’C:/Users/delphineeeee/.spyder-py3′)
Traceback (most recent call last):
File “”, line 1, in
runfile(‘C:/Users/delphineeeee/.spyder-py3/temp.py’, wdir=’C:/Users/delphineeeee/.spyder-py3′)
File “C:\Users\delphineeeee\Anaconda3\lib\site-packages\spyder_kernels\customize\spydercustomize.py”, line 704, in runfile
execfile(filename, namespace)
File “C:\Users\delphineeeee\Anaconda3\lib\site-packages\spyder_kernels\customize\spydercustomize.py”, line 108, in execfile
exec(compile(f.read(), filename, ‘exec’), namespace)
File “C:/Users/delphineeeee/.spyder-py3/temp.py”, line 12, in
cv2.imshow(‘image’,img)
error: OpenCV(3.4.5) d:\build\opencv\opencv-3.4.5\modules\highgui\src\window.cpp:366: error: (-215:Assertion failed) size.width>0 && size.height>0 in function ‘cv::imshow’
Hola Ramon, has probado a ver que tienes correctamente instalado opencv? Para comprobar que tienes opencv correctamente instalado ejecuta “import cv2” sin comillas, si no te sale ningun error debes poder leer imagenes sin problemas. Gracias por comentar!
La imagen no se muestra, aparece un cuadro gris, con el nombre ‘img(No responde) intento cerrarlo y me da las opciones:
Intentar que el programa responda
cerrar el programa
esperar a que el programa responda
si le doy cerrar el programa aparece el siguiente mensaje:
Assertion failed: Connection reset by peer [10054] (C:\Users\nwani\Downloads\mc3\conda‑bld\zeromq_1531316860385\work\src\signaler.cpp:379)
si le doy intentar que el programa responda aparece:
Exception in callback BaseSelectionEventLoop._read_from_self()
Handle: <Handle BaseSelectorEvenLoop._read_from_self()
Traceback…
como debo solucionarlo?
estoy usando spyder en anaconda y python 3.6
en la instalacion de opencv no marco ningun error y al importar tampoco
Espero puedan ayudarme
Hola Dave_RiC, revisa los cuadros amarillos y prueba a ejecutar este codigo:
import cv2
img = cv2.imread(‘tuimagen.jpg’,0)
cv2.imshow(‘image’,img)
k=cv2.waitKey(5000) & 0xFF
cv2.destroyAllWindows()
Si te funciona es que probablemente no estes usando “waitKey” ni el “destroyAllWindows()”. Saludos!
Hola Rafael, que hacer con el error
File “D:\PRUEBAS\prueba.py”, line 4, in
cv2.error: OpenCV(4.1.0) C:\projects\opencv-python\opencv\modules\highgui\src\window.cpp:352: error: (-215:Assertion failed) size.width>0 && size.height>0 in function ‘cv::imshow’
Hola Marlon, prueba bien todos los códigos del post y lee bien los cuadros en amarillo. Saludos!
Como hago para cargar la imgane con opencv en RGB y no BGR
Hola, es casi lo mismo solo que se intercambia la R(rojo) por la B(azul). Saludos!
Muy bien explicado.
funciona igual para imágenes Dicom???
Buenas alfredo, no se a que te refieres con imágenes Dicom …
Donde puedo descargar las Imágenes para los ejemplos
Hola Ernesto, puedes copiar las imágenes y guardarlas en tu pc para realizar el tutorial.