HOWTO · Matplotlib

Cómo mostrar una imagen con Matplotlib Python

Aprenda a cargar y mostrar una imagen local con imshow() de Matplotlib, mostrar una imagen PIL, personalizar su apariencia y guardar la figura.

En esta página

Usa matplotlib.pyplot.imread() para cargar una imagen, imshow() para colocar sus píxeles en unos ejes de Matplotlib y show() para mostrar la figura en un script. La ruta pasada a imread() debe identificar una imagen disponible para el proceso de Python. En los notebooks, la figura final suele mostrarse automáticamente; en un script normal, llama a plt.show().

Cargar y mostrar una imagen con Matplotlib

Este ejemplo autónomo crea una pequeña imagen de muestra, la lee con imread() y la muestra. Para tu archivo, sustituye la creación de la imagen de muestra y la asignación de image_path por la ruta a una imagen accesible para el proceso de Python. Coloca la imagen junto al script y usa su nombre de archivo, o proporciona una ruta absoluta; las rutas relativas se resuelven desde el directorio de trabajo actual del proceso.

from pathlib import Path
from tempfile import TemporaryDirectory

import matplotlib.pyplot as plt
import numpy as np

with TemporaryDirectory() as directory:
    image_path = Path(directory) / "sample.png"
    pixels = np.zeros((3, 3, 3), dtype=float)
    pixels[:, :, 0] = 1.0
    plt.imsave(image_path, pixels)

    image = plt.imread(image_path)
    plt.imshow(image)
    plt.axis("off")
    plt.show()
    print("Image loaded and displayed.")
Image loaded and displayed.

imread() carga el archivo en un array, e imshow() es una función de matplotlib.pyplot que muestra esos datos de imagen en los ejes actuales. axis("off") oculta los ejes y sus marcas. La muestra generada es solo un accesorio para este ejemplo ejecutable; cuando uses tu propia imagen, mantén ese archivo disponible en la ruta elegida y léelo directamente.

Mostrar una imagen con Matplotlib Python

Mostrar una imagen PIL con Matplotlib

Si una imagen ya está representada por un objeto de imagen PIL, pasa ese objeto a imshow() en lugar de leerlo con plt.imread(). Esto es útil cuando otra parte de tu programa ya ha abierto o procesado la imagen con Pillow. Image.show() es una ruta de visualización de PIL independiente; usa plt.show() para mostrar la figura de Matplotlib. Las dos llamadas de visualización utilizan rutas de renderizado diferentes, así que usa la ruta de Matplotlib cuando necesites ejes, tamaño de figura o exportación de la figura.

from pathlib import Path
from tempfile import TemporaryDirectory

import matplotlib.pyplot as plt
import numpy as np
from PIL import Image

with TemporaryDirectory() as directory:
    image_path = Path(directory) / "sample.png"
    plt.imsave(image_path, np.full((3, 3, 3), 0.4))

    with Image.open(image_path) as image:
        plt.imshow(image)
        plt.axis("off")
        plt.show()

Sustituye la ruta temporal de muestra por la ruta de tu propia imagen para abrir un archivo local. Esta ruta necesita Pillow, que proporciona PIL.Image.

Mostrar una imagen con Matplotlib Python PIL

Personalizar la visualización de la imagen

Para una vista en escala de grises de datos RGB, promedia sus tres canales de color y selecciona un mapa de colores en escala de grises. La operación mean(axis=2) siguiente supone que el tercer eje del array contiene los canales rojo, verde y azul; no es adecuada para todas las formas de imagen ni modelos de color. La interpolación cambia cómo Matplotlib renderiza los píxeles en pantalla, no el detalle de la imagen de origen.

import matplotlib.pyplot as plt
import numpy as np

image = np.array(
    [
        [[1.0, 0.2, 0.1], [0.2, 0.8, 0.3]],
        [[0.1, 0.3, 1.0], [0.8, 0.8, 0.8]],
    ]
)
plt.imshow(image.mean(axis=2), cmap="gray", interpolation="bicubic")
plt.axis("off")
plt.show()

cmap="gray" asigna los valores promediados a tonos de gris. Elige otro mapa de colores o ajuste de interpolación compatible cuando se adapte mejor a la imagen y a la forma en que se verá. Para conservar la imagen en color, pasa el array original a imshow() en lugar del array promediado. Las opciones de visualización afectan a la vista renderizada; no reescriben los datos de píxeles cargados.

Mostrar una imagen en escala de grises con Matplotlib Python

Guardar la figura mostrada

Usa savefig() para escribir la figura de Matplotlib en un archivo de imagen. Guarda la figura, incluidos sus ejes y su diseño, en lugar de cambiar la imagen original. Guarda antes de llamar a show() para que la figura siga estando disponible para la operación de guardado en los distintos backends de visualización.

import matplotlib.pyplot as plt
import numpy as np

image = np.full((3, 3, 3), 0.4)
plt.imshow(image)
plt.axis("off")
plt.savefig("displayed-image.png", bbox_inches="tight", pad_inches=0)
plt.show()

La ruta displayed-image.png se escribe en relación con el directorio de trabajo actual. Elige un nombre de archivo o una ruta diferentes para controlar dónde se guarda la figura. Para un recorte ajustado, bbox_inches="tight" recorta el espacio en blanco circundante y pad_inches=0 elimina el relleno adicional. Establece el tamaño de la figura antes de trazar si las dimensiones exportadas importan; el archivo guardado es una representación de la figura actual de Matplotlib.