HOWTO · Matplotlib

Wie man ein Bild mit Matplotlib Python anzeigt

Erfahren Sie, wie Sie ein lokales Bild mit Matplotlibs imshow() laden und anzeigen, ein PIL-Bild anzeigen, seine Darstellung anpassen und die Abbildung speichern.

Auf dieser Seite

Verwenden Sie matplotlib.pyplot.imread(), um ein Bild zu laden, imshow(), um seine Pixel in einer Matplotlib-Achse zu platzieren, und show(), um die Abbildung in einem Skript anzuzeigen. Der an imread() übergebene Pfad muss ein Bild identifizieren, das dem Python-Prozess zur Verfügung steht. In Notebooks wird die fertige Abbildung oft automatisch angezeigt; in einem regulären Skript rufen Sie plt.show() auf.

Ein Bild mit Matplotlib laden und anzeigen

Dieses eigenständige Beispiel erstellt ein kleines Beispielbild, liest es mit imread() und zeigt es an. Ersetzen Sie für Ihre Datei die Erstellung des Beispielbildes und die Zuweisung von image_path durch den Pfad zu einem Bild, auf das der Python-Prozess zugreifen kann. Legen Sie das Bild neben das Skript und verwenden Sie seinen Dateinamen, oder geben Sie einen absoluten Pfad an; relative Pfade werden vom aktuellen Arbeitsverzeichnis des Prozesses aus aufgelöst.

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() lädt die Datei in ein Array, und imshow() ist eine Funktion in matplotlib.pyplot, die diese Bilddaten in der aktuellen Achse anzeigt. axis("off") blendet die Achse und ihre Skalenstriche aus. Das erzeugte Beispiel ist nur eine Fixture für dieses ausführbare Beispiel; wenn Sie Ihr eigenes Bild verwenden, halten Sie diese Datei unter dem gewählten Pfad verfügbar und lesen Sie sie direkt.

Ein Bild mit Matplotlib Python anzeigen

Ein PIL-Bild mit Matplotlib anzeigen

Wenn ein Bild bereits durch ein PIL-Bildobjekt dargestellt wird, übergeben Sie dieses Objekt an imshow(), statt es mit plt.imread() zu lesen. Das ist nützlich, wenn ein anderer Teil Ihres Programms das Bild bereits mit Pillow geöffnet oder verarbeitet hat. Image.show() ist ein separater PIL-Anzeigeweg; verwenden Sie plt.show(), um die Matplotlib-Abbildung anzuzeigen. Die beiden Anzeigeaufrufe verwenden unterschiedliche Rendering-Pfade, verwenden Sie also den Matplotlib-Weg, wenn Sie Achsen, Abbildungsgröße oder Abbildungsexport benötigen.

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

Ersetzen Sie den temporären Beispielpfad durch Ihren eigenen Bildpfad, um eine lokale Datei zu öffnen. Dieser Weg benötigt Pillow, das PIL.Image bereitstellt.

Ein Bild mit Matplotlib Python PIL anzeigen

Die Bildanzeige anpassen

Für eine Graustufenansicht von RGB-Daten mitteln Sie seine drei Farbkanäle und wählen eine Graustufen-Farbpalette. Die folgende Operation mean(axis=2) setzt voraus, dass die dritte Achse des Arrays die roten, grünen und blauen Kanäle enthält; sie ist nicht für jede Bildform oder jedes Farbmodell geeignet. Die Interpolation verändert, wie Matplotlib die Pixel auf dem Bildschirm rendert, nicht die Details des Quellbildes.

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" bildet die gemittelten Werte auf Graustufen ab. Wählen Sie eine andere unterstützte Farbpalette oder Interpolationseinstellung, wenn sie besser zum Bild und zu seiner Betrachtungsweise passt. Um das Farbbild zu erhalten, übergeben Sie das ursprüngliche Array an imshow() statt des gemittelten Arrays. Die Anzeigeoptionen beeinflussen die gerenderte Ansicht; sie schreiben die geladenen Pixeldaten nicht um.

Ein Graustufenbild mit Matplotlib Python anzeigen

Die angezeigte Abbildung speichern

Verwenden Sie savefig(), um die Matplotlib-Abbildung in eine Bilddatei zu schreiben. Es speichert die Abbildung einschließlich ihrer Achsen und ihres Layouts, statt das Originalbild zu verändern. Speichern Sie, bevor Sie show() aufrufen, damit die Abbildung über Anzeige-Backends hinweg für den Speichervorgang noch verfügbar ist.

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

Der Pfad displayed-image.png wird relativ zum aktuellen Arbeitsverzeichnis geschrieben. Wählen Sie einen anderen Dateinamen oder Pfad, um zu steuern, wo die Abbildung gespeichert wird. Für einen engen Zuschnitt entfernt bbox_inches="tight" den umgebenden Leerraum und pad_inches=0 den zusätzlichen Abstand. Legen Sie die Abbildungsgröße vor dem Plotten fest, wenn die exportierten Abmessungen wichtig sind; die gespeicherte Datei ist eine Darstellung der aktuellen Matplotlib-Abbildung.