我有一个有趣的问题。就是那样;我正在尝试通过 mex 函数在内部使用 std::memcpy 函数,并像那样在 MATLAB 中调用该 mex 函数;
I2 = b_filter(I);
当我复制整个图像时,效果很好;
plhs[0] = mxCreateDoubleMatrix(mxGetM(plhs[0]), mxGetN(plhs[0]), mxREAL);
memcpy(mxGetPr(plhs[0]), mxGetPr(prhs[0]), sizeof(double) *mxGetM(plhs[0]) * mxGetN(plhs[0]));
但是当我尝试复制图像的某些部分时
plhs[0] = mxCreateDoubleMatrix(100, 100, mxREAL);
memcpy(mxGetPr(plhs[0]), mxGetPr(prhs[0]), sizeof(double) * 100 * 100);
它没有给出正确的图像部分,但给出了无意义的像素值。
那么这里发生了什么?
最佳答案
哈哈!您遇到了 mex 文件中最令人讨厌的细微差别之一!我之前也有过。 mex 函数中的数组按列顺序而非行顺序存储,因此您:
You still use column-first indexing like in Matlab, though
试试这个 page也可以拍一张漂亮的订购照片。
最后我会推荐阅读 this thread更好地了解 C 和 MATLAB 矩阵存储器按列排序的区别。
关于c++ - mex 内部调用的 memcpy 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17113909/