背景
二进制文件包含来自相机传感器的连续原始输出,该传感器采用拜耳模式的形式。即,数据是包含下面所示形式的信息的连续块,其中每个块是图像流中的图像
[(bayer width) * (bayer height) * sizeof(short)]
目标
从特定数据块读取信息并将其存储为阵列进行处理。我正在挖掘opencv文档,并完全迷失了如何继续。我为新手问题道歉,但有任何建议吗?
答案 0 :(得分:2)
假设您可以读取二进制文件(作为一个整体),我会尝试使用
Numpy将其读入numpy.array
。您可以使用numpy.fromstring并根据系统编写文件(小端或大端),使用>i2
或<i2
作为数据类型(您可以找到数据类型列表) here)。
另请注意&gt;意味着大端和&lt;意味着小端(更多关于here)
您可以设置偏移量并指定长度以便读取以读取某个块。
import numpy as np
with open('datafile.bin','r') as f:
dataBytes = f.read()
data = np.fromstring(dataBytes[blockStartIndex:blockEndIndex], dtype='>i2')
如果您无法整体阅读该文件,我会使用mmap(需要一点C知识),以便将其分解为多个文件,然后使用上述方法。
答案 1 :(得分:0)
import numpy as np
# Data read length
length = (bayer width) * (bayer height)
# In terms of bytes: short = 2
step = 2 * length
# Open filename
img = open("filename","rb")
# Block we are interested in i
img.seek(i * step)
# Copy data as Numpy array
Bayer = np.fromfime(img,dtype=np.uint16,count=length)
Bayer现在以numpy数组成功的形式保持拜耳模式值!!