在Python2.7中,通过USB批量传输,我从相机获得了图像帧:
frame = dev.read(0x81, 0x2B6B0, 1000)
我知道一帧是342x260 = 88920像素的小尾数,因为我从批量传输中读取了2x88920 = 177840(0x2B6B0)。
如何将typecode = B的帧数组的内容转换为uint16大字节序数组?
答案 0 :(得分:1)
类似这样的事情应该可以解决:
frame_short_swapped = array.array('H', ((j << 8) | i
for (i,j)
in zip(frame[::2], frame[1::2])))
它将来自frame
的两个连续字节配对,并将其解压缩为i
和j
。将j
左移一个字节,并用or
移至i
,有效地交换字节(也就是2字节类型的字节序转换),并将其馈送到H
类型的数组中。我对此感到有些不安,因为它应该对应于C short
类型(根据文档),但是类型大小实际上只能保证最小长度。我想如果对此要求严格的话,您需要引入ctypes.c_uint16
吗?