使用python有效地解压mono12packed位字符串格式

2024-10-01 11:33:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个摄像头的原始数据,它是mono12压缩格式的。这是一种隔行扫描的位格式,将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。在

要从文件中获取像素数据,请执行以下操作:

^{pr2}$

这是可行的,但速度非常慢,我想更有效地完成这项工作,因为我必须对大量的数据进行处理。在

我的想法是,通过一次读取超过3个字节,我可以在转换步骤中腾出一些时间,但我不知道如何做到这一点。在

另一个想法是,既然比特是4个一组的,那么也许有一种方法可以处理比特而不是比特。在

数据示例:

字节

'\x07\x85\x07\x05\x9d\x06'

引出数据

[117, 120, 93, 105]

Tags: 数据内存原始数据字节格式整数布局byte
1条回答
网友
1楼 · 发布于 2024-10-01 11:33:45

你试过按位运算符吗?也许这是一个更快的方法:

with open('binfile.txt', 'rb') as binfile:
  bytestring = list(bytearray(binfile.read()))


a = []

for i in range(0, len(bytestring), 3):
  px_bytes = bytestring[i:i+3]
  p0 = (px_bytes[0] << 4) | (px_bytes[1] & 0x0F)
  p1 = (px_bytes[2] << 4) | (px_bytes[1] >> 4 & 0x0F)
  a.append(p0)
  a.append(p1)

print a

这也输出: [117, 120, 93, 105]

希望有帮助!在

相关问题 更多 >