c++ - mex 内部调用的 memcpy 函数

标签 c++ matlab mex memcpy matrix-indexing

我有一个有趣的问题。就是那样;我正在尝试通过 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

Blog URL

试试这个 page也可以拍一张漂亮的订购照片。

Figure From Mathworks

最后我会推荐阅读 this thread更好地了解 C 和 MATLAB 矩阵存储器按列排序的区别。

关于c++ - mex 内部调用的 memcpy 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17113909/

相关文章:

c++ - 是否定义了静态初始化实现的顺序?

java - 从 Java 读取 .mat 文件

c++ - 在 mex 下编译 vtk 示例时找不到 GLIBCXX

matlab - 如何在 fortran mex 文件中使用 mxCalloc

c++ - 为什么用于阈值矩阵元素的 Matlab 逻辑索引操作在性能上优于 mex 实现?

c++ - 在 C++ 的 python 类中指定静态变量

c++ - Windows和Linux下用C++开发的程序的区别

C++ 11 - 将 C 样式回调绑定(bind)到类成员函数

matlab - 在结构体元胞数组中查找值

matlab - Matlab 中的凸优化