HOWTO · Matplotlib

Como mostrar uma imagem com o Matplotlib Python

Aprenda a carregar e exibir uma imagem local com o imshow() do Matplotlib, exibir uma imagem PIL, personalizar sua aparência e salvar a figura.

Nesta página

Use matplotlib.pyplot.imread() para carregar uma imagem, imshow() para colocar seus pixels em um eixo do Matplotlib e show() para exibir a figura em um script. O caminho passado para imread() deve identificar uma imagem disponível para o processo Python. Em notebooks, a figura final geralmente é exibida automaticamente; em um script comum, chame plt.show().

Carregar e mostrar uma imagem com o Matplotlib

Este exemplo autossuficiente cria uma pequena imagem de amostra, lê-a com imread() e a exibe. Para o seu arquivo, substitua a configuração da imagem de amostra e a atribuição de image_path pelo caminho de uma imagem acessível ao processo Python. Coloque a imagem ao lado do script e use seu nome de arquivo, ou forneça um caminho absoluto; os caminhos relativos são resolvidos a partir do diretório de trabalho atual do processo.

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() carrega o arquivo em um array, e imshow() é uma função de matplotlib.pyplot que exibe esses dados de imagem no eixo atual. axis("off") oculta o eixo e suas marcas. A amostra gerada é apenas um fixture para este exemplo executável; ao usar sua própria imagem, mantenha esse arquivo disponível no caminho escolhido e leia-o diretamente.

Mostrar uma imagem com o Matplotlib Python

Mostrar uma imagem PIL com o Matplotlib

Se uma imagem já estiver representada por um objeto de imagem PIL, passe esse objeto para imshow() em vez de lê-la com plt.imread(). Isso é útil quando outra parte do seu programa já abriu ou processou a imagem com o Pillow. Image.show() é uma rota de exibição PIL separada; use plt.show() para exibir a figura do Matplotlib. As duas chamadas de exibição usam caminhos de renderização diferentes, portanto use a rota do Matplotlib quando precisar de eixos, dimensionamento da figura ou exportação da 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()

Substitua o caminho temporário da amostra pelo caminho da sua própria imagem para abrir um arquivo local. Esta rota precisa do Pillow, que fornece PIL.Image.

Mostrar uma imagem com o Matplotlib Python PIL

Personalizar a exibição da imagem

Para uma vista em escala de cinza de dados RGB, faça a média de seus três canais de cor e selecione um mapa de cores em escala de cinza. A operação mean(axis=2) abaixo pressupõe que o terceiro eixo do array contém os canais vermelho, verde e azul; ela não é apropriada para todas as formas de imagem ou modelos de cor. A interpolação altera como o Matplotlib renderiza os pixels na tela, não o detalhe da imagem de origem.

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" mapeia os valores médios para tons de cinza. Escolha outro mapa de cores ou configuração de interpolação compatível quando ele se adequar melhor à imagem e à forma como ela será vista. Para preservar a imagem colorida, passe o array original para imshow() em vez do array mediado. As opções de exibição afetam a vista renderizada; elas não reescrevem os dados de pixel carregados.

Mostrar uma imagem em escala de cinza com o Matplotlib Python

Salvar a figura exibida

Use savefig() para gravar a figura do Matplotlib em um arquivo de imagem. Ela salva a figura, incluindo seus eixos e seu layout, em vez de alterar a imagem original. Salve antes de chamar show() para que a figura ainda esteja disponível para a operação de salvamento entre os backends de exibição.

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()

O caminho displayed-image.png é gravado em relação ao diretório de trabalho atual. Escolha um nome de arquivo ou caminho diferente para controlar onde a figura é salva. Para um recorte justo, bbox_inches="tight" apara o espaço em branco ao redor e pad_inches=0 remove o preenchimento extra. Defina o tamanho da figura antes de plotar se as dimensões exportadas importarem; o arquivo salvo é uma renderização da figura atual do Matplotlib.