Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Matlab MEX将图像传递到二维阵列 < >我想读取一些图像来运行C++ MeX函数来处理这个图像。图像最初存储为Matlab 3D矩阵,然后转换为2D矩阵,图像的每个切片存储为1D向量。下面是一些示例代码_C++_Arrays_Matlab_Mex - Fatal编程技术网

如何使用Matlab MEX将图像传递到二维阵列 < >我想读取一些图像来运行C++ MeX函数来处理这个图像。图像最初存储为Matlab 3D矩阵,然后转换为2D矩阵,图像的每个切片存储为1D向量。下面是一些示例代码

如何使用Matlab MEX将图像传递到二维阵列 < >我想读取一些图像来运行C++ MeX函数来处理这个图像。图像最初存储为Matlab 3D矩阵,然后转换为2D矩阵,图像的每个切片存储为1D向量。下面是一些示例代码,c++,arrays,matlab,mex,C++,Arrays,Matlab,Mex,第一:MEX功能: #include "mex.h" void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) { unsigned int** ubuff; size_t col_ubuff = mxGetN(prhs[0]); size_t row_ubuff = mxGetM(prhs[0]); ubuff = (unsigned int **)m

第一:MEX功能:

#include "mex.h"

void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) {

unsigned int** ubuff;

size_t col_ubuff    = mxGetN(prhs[0]);
size_t row_ubuff    = mxGetM(prhs[0]);

ubuff               = (unsigned int **)mxCalloc(col_ubuff, row_ubuff);

for(int x = 0; x < col_ubuff; x++) {
    ubuff[x] = (unsigned int *) mxCalloc(row_ubuff, sizeof(unsigned int));
}

for (int col=0; col < col_ubuff; col++) {
    for (int row=0; row < row_ubuff; row++) {
        ubuff[col][row] = mxGetPr(prhs[0])[row+col*row_ubuff];
    }
}

unsigned int the_pixel_i_want = ubuff[16][2*32 + 2];
printf ("Debug: %d\n\n", the_pixel_i_want);

return;
}
但输出有时为188,有时为0。我的代码中有内存泄漏吗?非常感谢你的帮助

编辑:


谢谢你的编辑。我从别人那里找到了一条路。把它放在这里是为了其他人的利益

1) 线路

应该是

ubuff = (unsigned int **)mxCalloc(col_ubuff, sizeof(unsigned int *));
 ubuff[col][row] = ((unsigned int *)mxGetData(prhs[0]))[row+col*row_ubuff];
2) 线路

应该是

ubuff = (unsigned int **)mxCalloc(col_ubuff, sizeof(unsigned int *));
 ubuff[col][row] = ((unsigned int *)mxGetData(prhs[0]))[row+col*row_ubuff];

谢谢你的编辑。我从别人那里找到了一条路。把它放在这里是为了其他人的利益。最好把你的答案作为答案而不是问题的延伸。因此,这是完全冷静的。然后,经过一段适当的时间,你可以接受自己的答案。通过发布一个答案,我们中间的食草动物可以立即看到这个问题已经得到了回答,并将我们的可怜的妓女代表拖到下一个未回答的问题。
 ubuff[col][row] = ((unsigned int *)mxGetData(prhs[0]))[row+col*row_ubuff];