HOWTO · Matplotlib

Comment afficher une image avec Matplotlib Python

Apprenez à charger et afficher une image locale avec imshow() de Matplotlib, à afficher une image PIL, à personnaliser son apparence et à enregistrer la figure.

Sur cette page

Utilisez matplotlib.pyplot.imread() pour charger une image, imshow() pour placer ses pixels dans un axe Matplotlib et show() pour afficher la figure dans un script. Le chemin passé à imread() doit identifier une image accessible au processus Python. Dans les notebooks, la figure finale est souvent affichée automatiquement ; dans un script ordinaire, appelez plt.show().

Charger et afficher une image avec Matplotlib

Cet exemple autonome crée une petite image d’échantillon, la lit avec imread() et l’affiche. Pour votre fichier, remplacez la création de l’image d’échantillon et l’affectation de image_path par le chemin d’une image accessible au processus Python. Placez l’image à côté du script et utilisez son nom de fichier, ou fournissez un chemin absolu ; les chemins relatifs sont résolus depuis le répertoire de travail actuel du processus.

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() charge le fichier dans un tableau, et imshow() est une fonction de matplotlib.pyplot qui affiche ces données d’image dans l’axe actuel. axis("off") masque l’axe et ses graduations. L’échantillon généré n’est qu’un dispositif pour cet exemple exécutable ; lorsque vous utilisez votre propre image, gardez ce fichier disponible au chemin choisi et lisez-le directement.

Afficher une image avec Matplotlib Python

Afficher une image PIL avec Matplotlib

Si une image est déjà représentée par un objet image PIL, passez cet objet à imshow() au lieu de la lire avec plt.imread(). C’est utile lorsqu’une autre partie de votre programme a déjà ouvert ou traité l’image avec Pillow. Image.show() est une voie d’affichage PIL distincte ; utilisez plt.show() pour afficher la figure Matplotlib. Les deux appels d’affichage utilisent des chemins de rendu différents, utilisez donc la voie Matplotlib lorsque vous avez besoin d’axes, de dimensionnement de figure ou d’exportation de figure.

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

Remplacez le chemin temporaire de l’échantillon par le chemin de votre propre image pour ouvrir un fichier local. Cette voie nécessite Pillow, qui fournit PIL.Image.

Afficher une image avec Matplotlib Python PIL

Personnaliser l’affichage de l’image

Pour une vue en niveaux de gris de données RGB, faites la moyenne de ses trois canaux de couleur et choisissez une palette de couleurs en niveaux de gris. L’opération mean(axis=2) ci-dessous suppose que le troisième axe du tableau contient les canaux rouge, vert et bleu ; elle ne convient pas à toutes les formes d’image ni à tous les modèles de couleur. L’interpolation modifie la façon dont Matplotlib rend les pixels à l’écran, et non le détail de l’image source.

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" associe les valeurs moyennées à des nuances de gris. Choisissez une autre palette de couleurs ou un autre réglage d’interpolation pris en charge lorsqu’il convient mieux à l’image et à la façon dont elle sera vue. Pour conserver l’image en couleur, passez le tableau d’origine à imshow() plutôt que le tableau moyenné. Les options d’affichage affectent la vue rendue ; elles ne réécrivent pas les données de pixels chargées.

Afficher une image en niveaux de gris avec Matplotlib Python

Enregistrer la figure affichée

Utilisez savefig() pour écrire la figure Matplotlib dans un fichier image. Elle enregistre la figure, y compris ses axes et sa mise en page, plutôt que de modifier l’image d’origine. Enregistrez avant d’appeler show() afin que la figure reste disponible pour l’opération d’enregistrement sur les différents backends d’affichage.

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

Le chemin displayed-image.png est écrit relativement au répertoire de travail actuel. Choisissez un autre nom de fichier ou un autre chemin pour contrôler où la figure est enregistrée. Pour un recadrage serré, bbox_inches="tight" supprime l’espace blanc environnant et pad_inches=0 enlève le rembourrage supplémentaire. Définissez la taille de la figure avant de tracer si les dimensions exportées importent ; le fichier enregistré est un rendu de la figure Matplotlib actuelle.