在visual studio c ++中使用MATLAB共享库

时间:2015-08-31 12:30:38

标签: matlab opencv visual-studio-2012 visual-c++ shared-libraries

我在MATLAB中有一个m文件。它在图像和模板之间计算normxcorr2如下:

function norm_res = TMatch(temp,image)
    c = normxcorr2(temp,image);
    norm_res = max(c(:));

当我从MATLAB命令行运行这个m文件时,有两个图像作为图像和模板,结果它给了我0.8076。 现在我使用以下命令将其构建为共享库:

mcc -B cpplib:TMatch TMatch.m

在MATLAB命令行中,它生成在C ++中使用所需的文件。

现在我在visual studio中使用生成的共享库如下:

    mclInitializaApplication();
    TMatchInitialize();
    Mat img = imread("image.jpg", IMREAD_GRAYSCALE);
    Mat tmp = imread("temp.jpg", IMREAD_GRAYSCALE);
    // these files are the same as files which are used in MATLAB

    mwArray mwImg(img.rows,img.cols,mxDOUBLE_CLASS,mxREAL);
    mwArray mwTemp(tmp.rows,tmp.cols,mxDOUBLE_CLASS,mxREAL);

    mwArray result;

    mwImg.SetData(img.data,img.cols * img.rows);
    mwTemp.SetData(tmp.data,tmp.cols * tmp.rows);

    TMatch(1,result,mwTemp,mwImg);

    double normed_res;
    result.GetData(&normed_res); //finally result will be 0.198949

正如您所看到的,当我在MATLAB中运行m-file时,结果将是:

0.8076 

当我生成一个共享库并在visual studio C ++中使用它时 结果将是:

0.198949

请告诉我为什么会这样? 提前谢谢。
(@Miki @ A.Riazi)

1 个答案:

答案 0 :(得分:1)

原因是MATLAB和VC ++ / OpenCV对矩阵使用不同的内存管理策略,其中MATLAB是列专业,而行主要用于VC ++ / OpenCV。

在调用MATLAB之前,尝试在MATLAB或VC ++ / OpenCV中转置矩阵。