Heim >Backend-Entwicklung >Python-Tutorial >Wie konvertiert man PIL-Bilder effizient in NumPy-Arrays für Pixeltransformationen?

Wie konvertiert man PIL-Bilder effizient in NumPy-Arrays für Pixeltransformationen?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-12 13:24:02232Durchsuche

How to Efficiently Convert PIL Images to NumPy Arrays for Pixel Transformations?

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

Bei der Arbeit mit Bildverarbeitungsaufgaben ist es oft wünschenswert, ein PIL ( Python Imaging Library)-Bild in ein NumPy-Array für schnellere pixelweise Transformationen. Diese Konvertierung ermöglicht eine effiziente Bearbeitung von Bilddaten und ermöglicht so komplexere und zeitoptimierte Bildoperationen.

Um ein PIL-Bild in ein NumPy-Array zu konvertieren, kann man den folgenden Codeausschnitt verwenden:

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

Dieser Code liest die Bilddaten aus dem PIL-Bild und formt sie in ein dreidimensionales NumPy-Array um, wobei jede Dimension die Höhe, Breite und den Kanal des Bildes (z. B. RGB) darstellt.

Zum Konvertieren Um das NumPy-Array nach der Durchführung der gewünschten Transformationen wieder in ein PIL-Bild umzuwandeln, kann der folgende Code verwendet werden:

new_pic = Image.fromarray(modified_pix)

Diese Methode ermöglicht jedoch keine direkte Änderung des ursprünglichen PIL-Bildes mithilfe des modifizierten NumPy-Arrays .

Vor PIL-Version 1.1.6 erforderte die Änderung des ursprünglichen PIL-Bildes die Konvertierung des NumPy-Arrays in eine Liste von Tupeln:

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

Dieser Ansatz kann jedoch langsam und ineffizient sein.

In PIL-Version 1.1.6 und höher ist die bevorzugte Methode zum Konvertieren zwischen PIL-Bildern und NumPy-Arrays:

pix = numpy.array(pic)

Dieser Befehl erzeugt ein dreidimensionales NumPy-Array mit Zeilen und Spalten und RGB-Kanäle als Abmessungen.

Nach der Durchführung der Pixeltransformationen kann das aktualisierte Array wie folgt wieder in ein PIL-Bild konvertiert werden:

new_pic = Image.fromarray(modified_pix)

Alternativ kann man das ursprüngliche PIL ändern Bild mit dem modifizierten NumPy-Array mit:

pic.putdata(modified_pix)

Das obige ist der detaillierte Inhalt vonWie konvertiert man PIL-Bilder effizient in NumPy-Arrays für Pixeltransformationen?. 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