HOWTO · Matplotlib

Wie man ein Bild in Matplotlib in Graustufen anzeigt

In diesem Artikel erfahren wir, wie Sie mit Matplotlib ein Graustufenbild anzeigen können. Um ein Graustufenbild mit der Matplotlib anzuzeigen, verwenden wir die matplotlib.pyplot.imshow() mit den Parametern cmap auf Grau, vmin auf 0 und vmax auf 255, wobei der Wert von cmap,vmin und vmax standardmäßig auf Keine gesetzt ist.

Auf dieser Seite

Um ein Graustufenbild mit Hilfe der Matplotlib anzuzeigen, benutzen wir die matplotlib.pyplot.imshow() mit den Parametern cmap auf 'gray', vmin auf 0 und vmax auf 255. Standardmäßig ist der Wert von cmap, vmin und vmax auf None gesetzt.

matplotlib.pyplot.imshow() zur Anzeige eines Bildes in Graustufen in der 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)

Beispiele: Matplotlib Bild in Graustufen anzeigen

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

Ausgabe:

Matplotlib-Anzeige Bild in Graustufen

Diese Methode liest das Bild lena.jpg, das ein RGB-Bild ist, mit Hilfe der Funktion imread() aus dem Modul matplotlib.image. Um das Bild als Graustufenbild darzustellen, benötigen wir nur einen Farbkanal. Für den nächsten Schritt nehmen Sie also nur einen einzigen Farbkanal und zeigen das Bild mit der Methode plt.imshow() an, wobei cmap auf 'gray', vmin auf 0 und vmax auf 255 gesetzt wird.

Schließlich verwenden wir die Methode show(), um ein Fenster zu zeigen, das das Bild in Graustufen anzeigt. Um das obige Skript auszuführen, müssen wir lena.jpg in unserem aktuellen Arbeitsverzeichnis haben.

Die Verwendung nur eines Farbkanals ist keine geeignete Methode zur Konvertierung von RGB-Bildern in Graustufenbilder, da wir spezielle Algorithmen haben, um die Konvertierung effizienter zu gestalten. Diese Algorithmen sind in fast allen gängigen Bildverarbeitungsbibliotheken implementiert. Unten zeigen wir ein Beispiel anhand der 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()

Ausgabe:

Matplotlib zeigt Bild in Graustufen mit dem Bildmodul

Hier lesen wir das Bild lena.jpg in unserem aktuellen Arbeitsverzeichnis mit der Funktion open() und konvertieren das Bild dann mit der Methode convert() in Graustufen mit 'L' als Argument. Danach konvertieren wir das Graustufenbild in ein NumPy-Array und zeigen das Bild mit der imshow()-Methode an.

Ein zweidimensionales Array in Matplotlib in Graustufen anzeigen

Die obigen Beispiele lesen eine Bilddatei von der Festplatte. imshow() funktioniert genauso mit einem zweidimensionalen Array, das das Programm selbst erstellt: Erstellen Sie das Array mit NumPy und übergeben Sie es dann an imshow() mit cmap auf "gray" gesetzt, und setzen Sie vmin und vmax auf die eigenen Minimal- und Maximalwerte des Arrays, damit der gesamte Datenbereich von Schwarz bis Weiß abgebildet wird.

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

Ausgabe:

Ein zweidimensionales NumPy-Array, das mit imshow in Graustufen angezeigt wird: Die Helligkeit nimmt gleichmäßig von Schwarz in der oberen linken Ecke (Wert 0) bis Weiß in der unteren rechten Ecke (Wert 255) zu, und eine Farbskala zeigt die Pixelwerte.

Das Array enthält Werte von 0 bis 255, sodass die dunkelste Zelle schwarz, die hellste weiß und jeder Wert dazwischen als proportionaler Grauton dargestellt wird.