我正在将二进制OpenCV Mat保存到HDF5文件。
在OpenCV的垫文件存储在与第一索引信道存储器中,第二个索引是X坐标和第三索引是Y坐标,所以一个地址访问的样子:
以错误的方式遍历数组数据Python/Matlab
address = M.data + M.step[0]*y + M.step[1]*x + ch
凡M.step [0 ] = NUM_X * NUM_CH和M.step [1] = MAX_CH
我遇到的问题是,Matlab和Python以错误的方式解释数据。
尽管读取数据的尺寸设置正确(通道,x,y),但当我查看我看到的数据存储时, numpy向后读取数据,这意味着首先y递增,然后x和最后的通道数,这意味着它假定通道数据的平面配置,而它实际上是交织的。这导致图像显示错误。
有没有办法告诉numpy/Matlab改变数据访问,而不重新排序数据?
在此先感谢。
编辑:
我存储一切在秩3的数据集在HDF5文件,其中维度1是信道,尺寸2是x坐标和尺寸3是y坐标。
如果我读取该数据集并使用C++中的OpenCV处理该数据集,则会显示正确的图像。在功能cvGetMat通过改变阵列,它已在一个被计算出的形状和步幅(-206)无法识别的或不支持的阵列型
你是如何读入的Python?你可以创建一个自定义numpy dtype来读入。我最近参加的一个聚会上有一个关于使用自定义numpy数据类型来读取任意数据的讨论,你可以在[这里]查看它(https://github.com/desertpy/presentations/blob/master/numpy-datatypes -godber/Numpy_Dtypes.ipynb)。也许这会有所帮助。 –