HOWTO · Matplotlib

Comment afficher une image en niveaux de gris dans Matplotlib

Dans cet article, nous apprendrons comment afficher une image en niveaux de gris à l'aide de Matplotlib. Pour afficher une image en niveaux de gris avec Matplotlib, nous utilisons la fonction matplotlib.pyplot.imshow() avec les paramètres cmap réglés sur gray, vmin sur 0 et vmax sur 255. Par défaut, la valeur de cmap,vmin et vmax est réglée sur None

Sur cette page

Pour afficher une image en niveaux de gris en utilisant Matplotlib, nous utilisons matplotlib.pyplot.imshow() avec les paramètres cmap réglés sur 'gray', vmin réglé sur 0 et vmax réglé sur 255. Par défaut, la valeur de cmap, vmin et vmax est réglée sur None.

matplotlib.pyplot.imshow() pour afficher une image en niveaux de gris dans Matplotlib

matplotlib.pyplot.imshow(X,
                         cmap=None,
                         norm=None,
                         aspect=None,
                         interpolation=None,
                         alpha=None,
                         vmin=None,
                         vmax=None,
                         origin=None,
                         extent=None,
                         shape= < deprecated parameter > ,
                         filternorm=1,
                         filterrad=4.0,
                         imlim= < deprecated parameter > ,
                         resample=None,
                         url=None,
                         *,
                         data=None,
                         **kwargs)

Exemples : Matplotlib affiche l’image en niveaux de gris

import matplotlib.pyplot as plt
import matplotlib.image as img

image = img.imread("lena.jpg")

plt.imshow(image[:, :, 1], cmap="gray", vmin=0, vmax=255, interpolation="none")
plt.show()

Production:

Matplotlib affiche l’image en niveaux de gris

Cette méthode lit l’image lena.jpg, qui est une image RGB utilisant la fonction imread() du module matplotlib.image. Pour afficher l’image en niveaux de gris, nous n’avons besoin que d’un canal de couleur. Donc pour l’étape suivante, il suffit de prendre un seul canal de couleur et d’afficher l’image en utilisant la méthode plt.imshow() avec cmap réglé sur 'gray', vmin réglé sur 0, et vmax réglé sur 255.

Enfin, nous utilisons la méthode show() pour afficher une fenêtre affichant l’image en niveaux de gris. Pour exécuter le script ci-dessus, nous devons avoir lena.jpg dans notre répertoire de travail actuel.

Prendre un seul canal de couleur n’est pas un moyen approprié pour convertir des images RVB en images en niveaux de gris car nous avons des algorithmes spécifiques pour rendre la conversion plus efficace. Ces algorithmes sont implémentés dans presque toutes les bibliothèques de traitement d’images disponibles. Ci-dessous, nous présentons un exemple utilisant le PIL.

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

image = Image.open("lena.jpg")
gray_image = image.convert("L")
gray_image_array = np.asarray(gray_image)
plt.imshow(gray_image_array, cmap="gray", vmin=0, vmax=255)
plt.show()

Production:

Matplotlib affiche l’image en niveaux de gris en utilisant le module d’image

Ici, nous lisons l’image lena.jpg dans notre répertoire de travail actuel en utilisant la fonction open() et nous convertissons ensuite l’image en niveaux de gris en utilisant la méthode convert() avec 'L' comme argument. Ensuite, nous convertissons l’image en niveaux de gris dans un tableau NumPy et nous affichons l’image en utilisant la méthode imshow().

Afficher un tableau bidimensionnel en niveaux de gris dans Matplotlib

Les exemples ci-dessus lisent un fichier image depuis le disque. imshow() fonctionne de la même manière avec un tableau bidimensionnel que le programme crée lui-même : construisez le tableau avec NumPy, puis transmettez-le à imshow() avec cmap défini sur "gray" et définissez vmin et vmax sur les valeurs minimale et maximale propres au tableau, afin que toute la plage des données soit mappée du noir au blanc.

import numpy as np
import matplotlib.pyplot as plt

# Build a two-dimensional array of grayscale values in code
x = np.linspace(0, 255, 16)
y = np.linspace(0, 255, 12)
data = (x[np.newaxis, :] + y[:, np.newaxis]) / 2

plt.imshow(data, cmap="gray", vmin=data.min(), vmax=data.max())
plt.colorbar(label="Pixel value")
plt.title("Two-dimensional array displayed in grayscale")
plt.show()

Production:

Un tableau NumPy bidimensionnel affiché en niveaux de gris avec imshow : la luminosité augmente progressivement du noir dans le coin supérieur gauche (valeur 0) au blanc dans le coin inférieur droit (valeur 255), et une barre de couleur indique les valeurs des pixels.

Le tableau contient des valeurs de 0 à 255, de sorte que la cellule la plus sombre s’affiche en noir, la plus claire en blanc, et chaque valeur intermédiaire comme une nuance de gris proportionnelle.