En este post revisaremos cómo mostrar imágenes con Matplotlib, openCV y Python.
Matplotlib
Matplotlib es una biblioteca para crear varios tipos de gráficas como funciones aritméticas, gráficos de barras, gráficas estadísticas, etc. En este post registro como mostrar una imagen con Matplotlib, esto puede ser útil para mostrar varias imágenes a la vez y comparar resultados.
Mostrar una imagen con Matplotlib
Leeremos la imagen Tren.png
que se muestra a continuación:
Para mostrar la imagen usamos la función imshow()
de Matplotlib
. Es importante cambiar el espacio de color (línea 7) a la imagen porque openCV lee la imagen como BGR
y Matplotlib la muestra como RBG
. Si no cambiamos de espacio de color, la imagen se mostrará con colores diferentes.
A continuación se describen las líneas de código usadas:
import cv2
, importar la biblioteca openCVimport matplotlib.pyplot as plt
, a la biblioteca matplotlib le asigno un aliasplt
imgBGR = cv2.imread('Tren.png')
- Leo la imagen Tren.jpg con la función imread de openCV.
- Nota: OpenCV carga las imágenes en formato B G R, y matplotlib muestra las imagenes en formato R G B por eso se debe cambiar el espaco de color de la imagen antes de mostrarla, caso contrario mostrará colores distintos
imgRGB = cv2.cvtColor(imgBGR, cv2.COLOR_BGR2RGB)
- Cambio el espacio de color desde B G R a R G B, usando la función cvtColor
plt.xticks([]), plt.yticks([])
evita que aparezcan ejes en la figuraplt.imshow(imgRGB')
, identifica que imagen mostrarplt.show()
, muestra la imagen
El código completo se muestra a continuación:
#importar Bibliotecas openCV, matplotlib
import cv2
import matplotlib.pyplot as plt
#Cargar la imagen con openCV
imgBGR = cv2.imread('Tren.png')
#Cambiar esacio de color BGR a RGB
imgRGB = cv2.cvtColor(imgBGR, cv2.COLOR_BGR2RGB)
#Mostrar imagen
plt.xticks([]), plt.yticks([])
plt.imshow(imgRGB, cmap='gray', interpolation='bicubic')
plt.show()
El resultado será el siguiente
Descarga estos archivos en GitHubMostrar imágenes con Matplotlib en una misma figura
Las imagenes que usaré estan en una carpeta llamada Imagenes_Ecuador
y son Amazonía.jpg, Cotopaxi.jpg, Galápagos.jpg, Manta.jpg, Otavalo.png, Quilotoa.jpg, Quito.jpg, Salinas.jpg, Tren.png
import cv2
, biblioteca openCVimport matplotlib.pyplot as plt
importar Matplotlib con un aliasplt
import os
importar módulo OS para acceder a las imagenes desde un direcrio específico- Identificar la ruta de las imágenes
dirCarpeta = '/home/noemi/Escritorio/Proy_Ocv/Matplotlib/Matplotlib-mostrar-imagen/ImagenesEcuador/'
archivos = os.listdir(path)
, método listdir crea una lista con los archivos que existen endirCarpeta
- Definir arreglos vacíos para luego llenarlos con datos
img_array = []
para datos de imagenestitulos_array = []
para títulos
- Bucle for
dirArchivo = dirCarpeta + archivos[x]
direccion y nombre de la imagen en una misma variableimgBGR = cv2.imread(dirArchivo)
leer la imagen con openCVimgRGB = cv2.cvtColor(imgBGR, cv2.COLOR_BGR2RGB)
cambiar el espacio de color B G R a R G Bimg_array.append(imgRGB)
llenar el arregloimg_array
con las imágenes que se leyero el la lìnea anteriorimg_ext = archivos[x]
guardar el nombre de la imagen y la extensión en la variableimg_ext
nomImagen = img_ext[:-4]
eliminar la extensión.jpg
o.png
del nombre de la imagentitulos_array.append(nomImagen)
crear un arreglo con todos los nombres de las imagenesplt.subplot(3, 3, x + 1)
especifica la cantidad de filas y columnas que tendrá la figura.x+1
ubica a las imagenes en una posición específicaplt.xticks([]), plt.yticks([])
ocultar valores numéricos de los ejesplt.xlabel(titulos_array[x])
escribe los nombres de cada imagen debajo de las mismasplt.imshow(img_array[x])
identifica que imagen mostraráplt.savefig('LugaresEcuador.jpg')
guardar la imagenplt.show()
Mostrar imagen
import os
import cv2
import matplotlib.pyplot as plt
dirCarpeta = '/home/kipuna/Escritorio/Python-MostrarImagenesMatplotlib-main/Imagenes_Ecuador/'
archivos = os.listdir(dirCarpeta)
img_array = []
titulos_array = []
for x in range (0,len(archivos)):
dirArchivo = dirCarpeta + archivos[x]
imgBGR = cv2.imread(dirArchivo)
imgRGB = cv2.cvtColor(imgBGR, cv2.COLOR_BGR2RGB)
img_array.append(imgRGB)
img_ext = archivos[x]
nomImagen = img_ext[:-4]
titulos_array.append(nomImagen)
plt.subplot(3,3,x+1)
plt.xticks([]), plt.yticks([])
plt.xlabel(titulos_array[x])
plt.imshow(img_array[x])
plt.suptitle('Lugares del Ecuador')
plt.savefig('lugaresEcuador.jpg')
plt.show()
El resultado será el siguiente, 3 filas de imágenes que se ajustan al tamaño de la figura para mostrarse todas y poder compararlas.
Encuentra más tutoriales con imágenes en Visión por computador básico
Salvavidas joven, te amo
Y yo a ti persona aprecia mi trabajo. Gracias por visitarnos 😀
Buen script. Felicitaciones!
Tienes algo para hacer reconocimiento facial?
Hola, aún no. Trabajaremos en eso en el futuro 😀 Gracias por visitarnos