通常我使用下面的函数为3波段和单色图像分配内存

/* For 3 band image */
plhs[0] = mxCreateNumericArray(3, dim_array, mxDOUBLE_CLASS, mxREAL);

/*For monochrome image */
plhs[0] = mxCreateDoubleMatrix(r,c,mxREAL);

当我们知道row(r)、column(c)和dim_数组的值时,就会出现这种情况。如果我们不知道r,c和dim_数组的值呢??这个问题听起来很愚蠢……但我想做的是从文件位置读取图像。我的Matlab函数是
outputImage = imageRead('C:\abc\def\ghi.bmp');

我只是将字符串作为输入传递,我无法从输入中获取r、c和dim_数组的值,但我们必须在主网关函数中为输出图像分配内存。如何为这个输出映像分配内存???

最佳答案

至少在R2015b,我认为你是这样做的。您可能需要首先通过文件来确定n_rowsn_cols等。。。

mwSize dims[3];      // for the dimensions of your numeric array
dims[0] = n_rows;
dims[1] = n_cols;
dims[2] = n_depth;   // 3 in case of 3-band, 1 in the case of monochrome

// call mxCreateNumeric to construct your array.
// as I understand mex works in 2015b, this should allocate memory for your array
mxArray *my_array = mxCreateNumericArray(3, dims, mxDOUBLE_CLASS, mxREAL);

// get a pointer to your array. Requires a cast to (double *)
double *array_data = (double *) mxGetData(my_array);

记住,MATLAB中的矩阵是列专业的!也就是说,my_array(i,j,k)条目将由array_data[i + j*n_rows + k * (n_rows*n_cols)]访问

关于c - 如何在Mex网关功能中为3波段或单色图像分配内存?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33816983/

10-11 17:53