因为用到OpenCV,所以不知道IplImage格式数据怎么转换成mxArray型的?
看到网上有代码如下:
对于多通道图像3通道彩色图像为三维矩阵,转换方式如下:const mwSize dims[3] = {pImage->height,pImage->width,3};
mxArray* pMat = mxCreateNumericArray(3,dims,mxUINT8_CLASS,mxREAL);
UINT8 *pMatPr = (UINT8*)mxGetData(pMat);
for(int k = 0; k < 3; k++)for(int j = 0; j < pImage->height; j++)for(int i = 0; i < pImage->width; i++)
{
        pMatPr[i * pImage->height + j + k * pImage->height * pImage->width] = CV_IMAGE_ELEM(pImage,uchar,j,i * 3 + 2 - k);
}
编译时没有问题,为什么运行不成功,程序老自动结束?
有没有高人可以指点迷津?

解决方案 »

  1.   

    这里的pMatPr应该是三维数组还是一维数组
    如果是三维那你这里声明的是一维的
    如果是三维就这样
    UINT8*** pMatPr = (UINT8***)mxGetData(pMat);
    然后数组下标可以直接用pMatPr[i][j][k]
      

  2.   

    谢谢你的解释,我试了一下,好像不行哦...
    更清楚一点我的问题是这样的,我写了一个matlab的函数test(img),参数为一个RGB三通道图像,然后我想在C里调用test(img),实际图像是一个IplImage格式的图像,设为m_cvImage,那具体该怎么转换呢?
    请一定帮帮我啊,第一次用混合编程,第一次用OpenCV,很混乱...
      

  3.   

    如果一定要用opencv,就不要混编了
    用matlab是为了方便快捷,什么函数都有
    如果混编,已经偏离了使用matlab的初衷,还是老老实实opencv吧,也很方便的