如何使用Matlab MEX将图像传递到2D数组

时间:2014-02-13 11:25:17

标签: c++ arrays matlab mex

我想读一些图像来运行C ++ MEX函数来处理这个图像。该图像最初存储为Matlab 3D矩阵,然后转换为2D矩阵,并且图像的每个切片存储为1D矢量。以下是一些示例代码。

首先: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,

%% Test input image as 2D array
clc; clf; clear all; close all;

volImage                                = 188.*ones(32,32,32);
volImageVec                             = reshape(volImage, 32*32, 32)';
volImageVec                             = uint32(volImageVec);

TestInputImage(volImageVec');`

但输出有时为188,有时为0.我的代码中是否存在内存泄漏?非常感谢你的帮助。

编辑:

感谢您的编辑。我找到了其他人的方式。只是把它放在这里以满足其他人的兴趣。

1)行

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

应该是

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

2)该行

 ubuff[col][row] = mxGetPr(prhs[0])[row+col*row_ubuff];

应该是

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

0 个答案:

没有答案