Python: lectura de imagen binaria empaquetada de 12 bits
Tengo una imagen empaquetada de 12 bits de una cámara GigE. Es un archivo little endian y cada 3 bytes contienen 2 píxeles de 12 bits. Estoy tratando de leer esta imagen usando Python y probé algo como esto:
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))
En resumen: leo 3 bytes, los convierto en bits y luego los descomprimo como dos enteros de 12 bits.
Sin embargo, el resultado es muy diferente de lo que debería ser. Parece que la imagen está separada en cuatro cuartos, cada uno de ellos expandido al tamaño de imagen completo y luego superpuesto.
¿Qué estoy haciendo mal aquí?
Actualizar: Aquí están los archivos de prueba:
No serán idénticos, pero deben mostrar la misma imagen. 12 bits normal tiene píxeles de 12 bits como uint16.
with open('12bit1.bin', 'rb') as f:
a = numpy.fromfile(f, dtype=numpy.uint16)
b = numpy.reshape(a,(484,644))