【发布时间】:2016-10-14 08:18:01
【问题描述】:
我有一张来自 GigE 相机的 12 位打包图像。它是一个 little-endian 文件,每 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 位像素为 uint16。
with open('12bit1.bin', 'rb') as f:
a = numpy.fromfile(f, dtype=numpy.uint16)
b = numpy.reshape(a,(484,644))
【问题讨论】:
-
听起来图像是交错的,如果将4个象限合并为1个象限是否正确?见en.wikipedia.org/wiki/Interlacing_(bitmaps)
-
不,它不是隔行扫描的。如果是这样的话,至少在水平方向上看起来不错,但这在两个方向上都是错误的。