在mex中调用memcpy函数

Ali*_*nez 3 c++ matlab mex memcpy matrix-indexing

我有一个有趣的问题.就是这样; 我试图在mex函数中使用std :: memcpy函数,并在MATLAB中调用那个mex函数;

I2 = b_filter(I);
Run Code Online (Sandbox Code Playgroud)

当我复制整个图像时,效果很好;

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]));
Run Code Online (Sandbox Code Playgroud)

但是当我试图复制图像的某些部分时

plhs[0] =  mxCreateDoubleMatrix(100, 100, mxREAL);              
memcpy(mxGetPr(plhs[0]), mxGetPr(prhs[0]), sizeof(double) * 100 * 100);
Run Code Online (Sandbox Code Playgroud)

它没有给出正确的图像部分,但却给出了无意义的像素值.

那么这里发生了什么?

mac*_*uff 5

哈哈!你被一个最糟糕的mex文件细微差别抓住了!它之前也有我.mex函数中的数组按列顺序而不是行顺序存储,因此您:

不过,您仍然可以像在Matlab中一样使用列优先索引

博客网址

尝试这个页面也可以获得一个很好的订购图片.

图来自Mathworks

最后,我建议阅读这个帖子,以便更好地了解C和MATLAB矩阵存储器的差异,这些差异是按列排序的.