Heim >Backend-Entwicklung >Python-Tutorial >Wie konvertiert man PIL-Bilder effizient in NumPy-Arrays zur Pixelmanipulation und zurück?

Wie konvertiert man PIL-Bilder effizient in NumPy-Arrays zur Pixelmanipulation und zurück?

Susan Sarandon
Susan SarandonOriginal
2024-11-19 14:18:03708Durchsuche

How to Efficiently Convert PIL Images to NumPy Arrays for Pixel Manipulation and Back?

Konvertieren von PIL-Bildern in NumPy-Arrays für eine effiziente Pixelmanipulation

Frage: Wie können Sie ein PIL-Bild in ein NumPy-Array für schnellere Pixel konvertieren? -weise Transformationen, ohne dass bei der Konvertierung zurück in eine PIL Probleme auftreten Bild?

Antwort:

Der Prozess umfasst zwei Schritte:

Konvertieren eines PIL-Bilds in ein NumPy-Array

Um ein PIL zu konvertieren Um ein Bild in ein NumPy-Array zu konvertieren, können Sie diesen Code als Beispiel verwenden:

pic = Image.open("foo.jpg")
pix = numpy.array(pic.getdata()).reshape(pic.size[0], pic.size[1], 3)

Konvertieren NumPy-Array zurück zum PIL-Bild

Verwendung von pic.putdata():

Wenn sich pic.putdata() beim Versuch, das geänderte Array zurück zu laden, nicht wie erwartet verhält Überprüfen Sie beim Einfügen in das PIL-Bild, ob Sie die Daten in einem Format bereitstellen, das putdata() akzeptiert. Es wird eine Folge von Tupeln erwartet, daher müssen Sie das Array möglicherweise in dieses Format konvertieren, wie unten gezeigt:

data = list(tuple(pixel) for pixel in pix)
pic.putdata(data)

Verwendung von PIL 1.1.6:

Ab PIL 1.1.6 können Sie den folgenden vereinfachten Ansatz zum Konvertieren zwischen Bildern und NumPy verwenden Arrays:

pix = numpy.array(pic)

Dies führt zu einem dreidimensionalen Array mit Zeilen, Spalten und RGB-Werten.

Letzte Schritte:

Nachdem Sie Änderungen am Array vorgenommen haben, können Sie entweder pic.putdata(pix) oder Image.fromarray(pix) verwenden, um eine neue PIL zu erstellen Bild.

Das obige ist der detaillierte Inhalt vonWie konvertiert man PIL-Bilder effizient in NumPy-Arrays zur Pixelmanipulation und zurück?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn