Ich habe gerade eine Bildverarbeitung mit der Python-Bildbibliothek (PIL) unter Verwendung eines Beitrags durchgeführt, den ich zuvor gefunden habe, um Fourier-Transformationen von Bildern durchzuführen, und ich kann die Speicherfunktion nicht zum Laufen bringen. Der gesamte Code funktioniert einwandfrei, aber das resultierende Bild wird nicht gespeichert:
from PIL import Image
import numpy as np
i = Image.open("C:/Users/User/Desktop/mesh.bmp")
i = i.convert("L")
a = np.asarray(i)
b = np.abs(np.fft.rfft2(a))
j = Image.fromarray(b)
j.save("C:/Users/User/Desktop/mesh_trans",".bmp")
Der Fehler, den ich bekomme, ist der folgende:
save_handler = SAVE[string.upper(format)] # unknown format
KeyError: '.BMP'
Wie kann ich ein Bild mit Pythons PIL speichern?
quelle
fft2
anstelle von,rfft2
da ich für diskrete Daten keinen Sinn darin sehe, die späteren zu verwenden. Der Rest ist rein kosmetisch, dh Sie könnten die Fourier-Transformation nicht richtig visualisieren, ohne einen Log-Faktor darauf anzuwenden. Dann besteht die Normalisierung darin, die Umrechnung in den Bereich [0, 255] einfach zu halten.visual = (visual - visual.min()) / (visual.max() - visual.min())
wird standardmäßig verwendet, wennvisual
keine AbweichungSie sollten in der Lage sein, PIL einfach den Dateityp von der Erweiterung abrufen zu lassen, dh verwenden Sie:
quelle
numpy.uint8
dtype konvertieren und nicht in float.Versuchen Sie, das
.
vor dem zu entfernen.bmp
(es stimmt nichtBMP
wie erwartet überein). Wie Sie aus dem Fehler ersehen können,save_handler
ist das obere Gehäuse das vonformat
Ihnen bereitgestellte und sucht dann nach einer Übereinstimmung inSAVE
. Der entsprechende Schlüssel in diesem Objekt ist jedochBMP
(anstelle von.BMP
).Ich weiß nicht viel darüber
PIL
, aber nach einigem Suchen scheint es ein Problem mitmode
dem Bild zu sein. Ändern der Definition vonj
in:Schien für mich zu funktionieren (beachten Sie jedoch, dass ich nur sehr wenig darüber
PIL
weiß, daher würde ich vorschlagen, die Lösung von @ mmgp zu verwenden, da er / sie genau weiß, was sie tun :)). Für die Arten von habemode
ich diese Seite verwendet - hoffentlich funktioniert eine der Auswahlmöglichkeiten für Sie.quelle
Ich weiß, dass dies alt ist, aber ich habe festgestellt, dass (während der Verwendung von Pillow) das Öffnen der Datei mithilfe von
open(fp, 'w')
und das anschließende Speichern der Datei funktionieren. Z.B:fp
natürlich der Dateipfad.quelle
format
Parameter verwendet werden sollte, wenn ein Dateiobjekt in verwendet wirdsave
. Ist das nicht nötig?