matlab - 在 Visual Studio C++ 中使用 MATLAB 共享库

标签 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)

最佳答案

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

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

关于matlab - 在 Visual Studio C++ 中使用 MATLAB 共享库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32311321/

相关文章:

python - 在opencv中绘制轮廓

C++ 模板链表链接器错误

c# - 将文件夹名称与 Productivity Power Tools 颜色编码相匹配的正则表达式

matlab - matlab/octave 中的映射函数类似于 LISP 中的 mapcar

Matlab 3d体积可视化和3d叠加

c - 根据 2 级 C-mex S-Function 中的导入数据类型设置输出端口的 Simulink block 数

python - opencv的waitKey()函数使用其他键

matlab - Simulink 模块在特定时间逐步增加信号

python - 类型错误 : unsupported operand type(s) for +: 'PosixPath' and 'str'

c# - 如何让 Visual Studio 中的设计器使用参数化构造函数生成组件