Heim >Backend-Entwicklung >Python-Tutorial >Wie konvertiert man PIL-Bilder effizient in NumPy-Arrays zur Pixelmanipulation und zurück?
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:
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)
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!