Mostrar imágenes con Matplotlib, openCV y Python

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:

Imagen Tren.png

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:

  1. import cv2, importar la biblioteca openCV
  2. import matplotlib.pyplot as plt, a la biblioteca matplotlib le asigno un alias plt
  3. 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
  4. imgRGB = cv2.cvtColor(imgBGR, cv2.COLOR_BGR2RGB)
  5. plt.xticks([]), plt.yticks([]) evita que aparezcan ejes en la figura
  6. plt.imshow(imgRGB'), identifica que imagen mostrar
  7. plt.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 GitHub

Mostrar 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

Desplegar la explicación del código
  1. import cv2, biblioteca openCV
  2. import matplotlib.pyplot as plt importar Matplotlib con un alias plt
  3. import os importar módulo OS para acceder a las imagenes desde un direcrio específico
  4. 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 en dirCarpeta
  5. Definir arreglos vacíos para luego llenarlos con datos
    • img_array = [] para datos de imagenes
    • titulos_array = [] para títulos
  6. Bucle for
    • dirArchivo = dirCarpeta + archivos[x] direccion y nombre de la imagen en una misma variable
    • imgBGR = cv2.imread(dirArchivo) leer la imagen con openCV
    • imgRGB = cv2.cvtColor(imgBGR, cv2.COLOR_BGR2RGB) cambiar el espacio de color B G R a R G B
    • img_array.append(imgRGB) llenar el arreglo img_array con las imágenes que se leyero el la lìnea anterior
    • img_ext = archivos[x] guardar el nombre de la imagen y la extensión en la variable img_ext
    • nomImagen = img_ext[:-4] eliminar la extensión .jpg o .png del nombre de la imagen
    • titulos_array.append(nomImagen) crear un arreglo con todos los nombres de las imagenes
    • plt.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ífica
    • plt.xticks([]), plt.yticks([]) ocultar valores numéricos de los ejes
    • plt.xlabel(titulos_array[x]) escribe los nombres de cada imagen debajo de las mismas
    • plt.imshow(img_array[x]) identifica que imagen mostrará
    • plt.savefig('LugaresEcuador.jpg') guardar la imagen
    • plt.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

4 comentarios en “Mostrar imágenes con Matplotlib, openCV y Python”

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *