数组数据遍历方式错误Python/Matlab

Array data is traversed in a wrong way Python/Matlab

我正在将二进制 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 文件中的等级 3 数据集中,其中维度 1 是通道,维度 2 是 x 坐标,维度 3 是 y 坐标。
如果我读取该数据集并使用 C++ 中的 OpenCV 对其进行处理,则会显示正确的图像。 python 中的 OpenCV 不工作,因为错误:(-206) 函数 cvGetMat

中无法识别或不支持的数组类型

我可以通过更改数组的形状和步长来解决 python 中的问题,这是计算错误的方法:
如果我有一个 3*1280*720 uint8 图像,其中 3 是通道号,1280 是 x 坐标,720 是 y 坐标,我将不得不分配形状,所以它看起来像 data.shape = (720 , 1280, 3) 并且步幅必须更改为 data.strides = (3*1280,3,1).

link 解释了 numpy 数组在内存中的工作原理:
Numpy doc