Python: чтение 12-битного упакованного двоичного изображения

У меня 12-битное упакованное изображение с камеры GigE. Это файл с прямым порядком байтов, и каждые 3 байта содержат 2 12-битных пикселя. Я пытаюсь прочитать это изображение с помощью Python, и я попробовал что-то вроде этого:

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))

Вкратце: я читаю 3 байта, преобразую их в биты, а затем распаковываю как два 12-разрядных целых числа.

Результат, однако, сильно отличается от того, что должно быть. Похоже, что изображение разделено на четыре части, каждая из которых расширена до полного размера изображения, а затем перекрыта.

Что я здесь не так делаю?

Обновить: Вот тестовые файлы:

12-битная упаковка

12-битный нормальный

Они не будут идентичны, но они должны показывать одно и то же изображение. 12-битный нормальный имеет 12-битный пиксель как uint16.

with open('12bit1.bin', 'rb') as f:
    a = numpy.fromfile(f, dtype=numpy.uint16)

b = numpy.reshape(a,(484,644))

Ответы на вопрос(1)

Ваш ответ на вопрос