我在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)
答案 0 :(得分:1)
原因是MATLAB和VC ++ / OpenCV对矩阵使用不同的内存管理策略,其中MATLAB是列专业,而行主要用于VC ++ / OpenCV。
在调用MATLAB之前,尝试在MATLAB或VC ++ / OpenCV中转置矩阵。