【发布时间】:2018-02-02 13:25:27
【问题描述】:
我正在将二进制 OpenCV Mat 保存到 HDF5 文件中。
在 OpenCV Mat 文件中,第一个索引通道存储在内存中,第二个索引是 x 坐标,第三个索引是 y 坐标,因此地址访问如下所示:
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 更改数据访问,而不重新排序数据?
提前致谢。
编辑:
我将所有内容存储在 hdf5 文件中的 rank 3 数据集中,其中维度 1 是通道,维度 2 是 x 坐标,维度 3 是 y 坐标。
如果我读取该数据集并使用 C++ 中的 OpenCV 对其进行处理,则会显示正确的图像。由于错误,python 中的 OpenCV 不起作用:(-206) 函数 cvGetMat 中的数组类型无法识别或不受支持
【问题讨论】:
-
你是如何将它读入 Python 的?您可以创建一个自定义的 numpy dtype 来读入。我最近参加的一个聚会讨论了使用自定义 numpy 数据类型读取任意数据,您可以查看 here。也许这会有所帮助。
标签: python c++ matlab opencv hdf5