我有来自相机的原始数据,它是 mono12packed 格式。这是一种交错位格式,将 2 个 12 位整数存储在 3 个字节中以消除开销。明确地,每 3 个字节的内存布局如下所示:
Byte 1 = Pixel0 Bits 11-4
Byte 2 = Pixel1 Bits 3-0 + Pixel0 Bits 3-0
Byte 3 = Pixel1 Bits 11-4
我有一个文件,可以使用二进制读取从其中读取所有字节,假设它被称为binfile
.
要从我做的文件中获取像素数据:
from bitstring import BitArray as Bit
f = open(binfile, 'rb')
bytestring = f.read()
f.close()
a = []
for i in range(len(bytestring)/3): #reading 2 pixels = 3 bytes at a time
s = Bit(bytes = bytestring[i*3:i*3+3], length = 24)
p0 = s[0:8]+s[12:16]
p1 = s[16:]+s[8:12]
a.append(p0.unpack('uint:12'))
a.append(p1.unpack('uint:12'))
这可行,但速度非常慢,我想更有效地做到这一点,因为我必须为大量数据这样做。
我的想法是,通过一次读取超过 3 个字节,我可以在转换步骤中腾出一些时间,但我不知道如何做到这一点。
另一个想法是,由于位是 4 个一包的,也许有一种方法可以处理半字节而不是位。
数据示例:
字节
'\x07\x85\x07\x05\x9d\x06'
导致数据
[117, 120, 93, 105]