我在 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/