相关疑难解决方法(0)

Python:读取12位二进制文​​件

我试图使用Python 3读取包含图像(视频)的12位二进制文​​件.

要读取类似的文件但以16位编码,以下内容非常有效:

import numpy as np
images = np.memmap(filename_video, dtype=np.uint16, mode='r', shape=(nb_frames, height, width))
Run Code Online (Sandbox Code Playgroud)

其中filename_video是可以从另一个文件读取的视频的文件和nb_frames,高度和宽度特征.通过"工作得很好"我的意思是快速:在我的计算机上读取140帧的640x256视频大约需要1毫秒.

据我所知,当文件以12位编码时我不能使用它,因为没有uint12类型.所以我要做的是读取一个12位文件并将其存储在一个16位的uint数组中.以下内容取自(Python:读取12位打包二进制图像),有效:

with open(filename_video, 'rb') as f:
    data=f.read()
images=np.zeros(int(2*len(data)/3),dtype=np.uint16)
ii=0
for jj in range(0,int(len(data))-2,3):
    a=bitstring.Bits(bytes=data[jj:jj+3],length=24)
    images[ii],images[ii+1] = a.unpack('uint:12,uint:12')
    ii=ii+2
images = np.reshape(images,(nb_frames,height,width))
Run Code Online (Sandbox Code Playgroud)

然而,这非常慢:阅读640x256视频只有5帧,我的机器需要大约11.5秒.理想情况下,我希望能够像使用memmap读取8位或16位文件一样有效地读取12位文件.或者至少慢10 ^ 5倍.我怎么能加快速度呢?

这是一个文件示例: http ://s000.tinyupload.com/index.php?file_id = 26973488795334213426(nb_frames = 5,height = 256,width = 640).

python binary unpack python-3.x

3
推荐指数
2
解决办法
2173
查看次数

标签 统计

binary ×1

python ×1

python-3.x ×1

unpack ×1