Python: Lesen von 12-Bit-Binärbildern
Ich habe ein 12-Bit-Bild von einer GigE-Kamera gepackt. Es ist eine Little-Endian-Datei und jedes 3 Byte enthält 2 12-Bit-Pixel. Ich versuche, dieses Bild mit Python zu lesen, und habe Folgendes versucht:
import bitstring
import numpy
with open('12bitpacked1.bin', 'rb') as f:
data = f.read()
ii=numpy.zeros(2*len(data)/3)
ic = 0
for oo in range(0,len(data)/3):
aa = bitstring.Bits(bytes=data[oo:oo+3], length=24)
ii[ic],ii[ic+1] = aa.unpack('uint:12,uint:12')
ic=ic+2
b = numpy.reshape(ii,(484,644))
urz gesagt: Ich lese 3 Bytes, konvertiere sie in Bits und entpacke sie dann als zwei 12-Bit-Ganzzahle
Das Ergebnis unterscheidet sich jedoch stark von dem, was es sein sollte. Es sieht so aus, als ob das Bild in vier Viertel aufgeteilt ist, von denen jedes auf die volle Bildgröße vergrößert und dann überlappt wird.
Was mache ich hier falsch?
Aktualisieren Hier sind die Testdateien:
Sie werden nicht identisch sein, aber sie sollten das gleiche Bild zeigen. 12-Bit-Normal hat 12-Bit-Pixel als uint16.
with open('12bit1.bin', 'rb') as f:
a = numpy.fromfile(f, dtype=numpy.uint16)
b = numpy.reshape(a,(484,644))