我試圖讀取包含圖像使用Python 3的Python:讀取12位二進制文件
要讀取類似文件,但在16位編碼(視頻)12位二進制文件,下面的作品非常良好:
import numpy as np
images = np.memmap(filename_video, dtype=np.uint16, mode='r', shape=(nb_frames, height, width))
其中filename_video是文件和nb_frames,高度和視頻的寬度的特點,可以從另一個文件中讀取。通過「工作得很好」我的意思是快速:在我的計算機上閱讀具有140幀的640x256視頻需要大約1 ms。
據我所知,當文件編碼爲12位時,由於沒有uint12類型,我不能使用它。所以我試圖做的是讀取一個12位文件並將其存儲在一個16位uint數組中。下面,從(Python: reading 12 bit packed binary image)採取工程:
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))
然而,這是很慢:讀取640x256的視頻臨屋區只有5幀需要大約11.5住在我的機器。理想情況下,我希望能夠有效地讀取12位文件,因爲我可以使用memmap讀取8位或16位文件。或者至少不會慢10^5倍。我怎麼能加快速度?
這是一個文件示例: http://s000.tinyupload.com/index.php?file_id=26973488795334213426 (nb_frames = 5,height = 256,width = 640)。