Lesen von 16-bit-PNG-Bild-Datei mit Python
Ich versuche zu Lesen ein PNG-Bild-Datei geschrieben, die in 16-bit-Datentyp. Die Daten sollten umgewandelt werden in ein NumPy-array. Aber ich habe keine Ahnung, wie die Datei zu Lesen, in '16-bit'. Ich habe versucht, mit PIL und SciPy, aber Sie konvertiert die 16-bit-Daten in 8-bit, wenn Sie es laden. Könnte jemand bitte lassen Sie mich wissen, wie Daten aus einem 16-bit-PNG-Datei und wandelt es in ein NumPy-array ohne ändern der Datentyp?
Im folgenden ist der script, das ich verwendet.
from scipy import misc
import numpy as np
from PIL import Image
#make a png file
a = np.zeros((1304,960), dtype=np.uint16)
a[:] = np.arange(960)
misc.imsave('16bit.png',a)
#read the png file using scipy
b = misc.imread('16bit.png')
print "scipy:" ,b.dtype
#read the png file using PIL
c = Image.open('16bit.png')
d = np.array(c)
print "PIL:", d.dtype
InformationsquelleAutor Nownuri | 2015-09-17
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich habe das gleiche problem hier. Getestet habe ich es auch mit 16-bit-Bilder, die ich erstellt, die von meinen eigenen. Alle von Ihnen waren richtig öffnen, wenn ich überhäufte Sie mit der png-Paket. Auch die Ausgabe von 'file' geschaut, okay.
Öffnen Sie mit PIL führte immer zu 8-bit-numpy-arrays.
Arbeiten mit Python 2.7.6 auf Linux btw.
Wie diese es für mich funktioniert:
Vielleicht kann mir jemand weitere Informationen darüber geben, unter welchen Umständen der ehemalige Ansatz gearbeitet? (wie dieses ist ziemlich langsam)
Vielen Dank im Voraus.
InformationsquelleAutor Mr.Fridy
Ich vermute, Ihr "16 bit" PNG ist nicht 16-bit. (wenn Sie auf Linux-oder Mac-Sie laufen konnte
file 16bit.png
und sehen, was es sagt)Wenn ich mit PIL und numpy bekomme ich eine 32-bit-array mit 16-bit-Werte:
Ausgabe:
file 16bit.png
wie Sie Sie vorschlagen, es bestätigt, dass das Bild 16-bit. Aberpixel.dtype
noch uint8.Ich bin mit Python 3.6. Hier funktioniert es mit einer echten 16 bit-png-Bild.
InformationsquelleAutor David Jones
Dies geschieht, weil PIL unterstützt keine 16-bit-Daten, erfahren Sie hier: http://effbot.org/imagingbook/concepts.htm
Verwende ich eine Arbeit, um mithilfe der osgeo gdal-Paket (das Lesen kann PNG).
Zurückkehren
Einen saubereren Weg, ich fand, ist mit der skimage Paket.
Wo 'im' werden in ein numpy-array.
Anmerkung: ich habe noch nicht getestet mit PNG funktioniert es aber mit TIFF-Dateien
I;16
.InformationsquelleAutor Thomas Van Der Weide
Bin ich mit png-Modul:
Bei der ersten Installation png von:
>pip install pypng
Dann
InformationsquelleAutor Wenyi Tang
Spiele ich schon mit diesem Bild mit PIL-version 5.3.0:
liest es die Daten gut:
und speichert es in den richtigen Modus, aber die Inhalte sind nicht identisch:
jedoch
image.show()
immer konvertiert in 8-bit-Graustufen, gespannt auf 0 und 255. so ist es nutzlos für das sehen, was du hast in jeder Phase der transformation. während ich schreiben konnte, eine routine zu tun, und vielleicht sogar monkeypatch.show()
ich nur laufendisplay
Befehl in einem anderen xterm.beachten Sie, dass das konvertieren in Modus
I;16
hilft nichts:InformationsquelleAutor jcomeau_ictx