c++ - C++ 和 Matlab 互相关

标签 c++ matlab opencv cross-correlation

我正在尝试用 C++ 进行互相关。问题是我在 matlab 中没有得到相同的结果。

C++代码

float telo[5] = {-1, 0, 1, 2, 3};
Mat prueba(1, 5, CV_32F, telo);
float telo2[3] = { 0, 1, 2 };
Mat prueba2(1, 3, CV_32F, telo2);
Mat result;
matchTemplate(prueba, prueba2, result, CV_TM_CCORR);
Result: 2048.0004882812500 2.660783784765e-314#DEN -6.2774385622041925e+066

Matlab代码:

a = [-1,0,1,2,3]
b = [0,1,2]
xcorr2(a,b)
Result: -2 -1 2 5 8 3 0

我做错了什么?

最佳答案

当我使用 OpenCV 3 尝试您的 C++ 代码示例时,我得到了以下结果,正如预期的那样:

2, 5, 8

这与 Matlab 解决方案相同,但没有尾部。


编辑:

要获得与 Matlab 相同的结果,您可以向输入数据添加一些零填充。在您的数据中手动执行此操作:

float telo[9] = {0, 0, -1, 0, 1, 2, 3, 0, 0};
Mat prueba(1, 9, CV_32F, telo);

或者更通用的解决方案(也应该适用于二维数据)是调用

copyMakeBorder(prueba, prueba, prueba2.rows - 1, prueba2.rows - 1, prueba2.cols - 1, prueba2.cols - 1, cv::BORDER_CONSTANT);

matchTemplate之前。

关于c++ - C++ 和 Matlab 互相关,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32064494/

相关文章:

c++ - 这里没有定义虚拟析构函数

c++ - Qt with OpenCV - 下载哪一个

c++缓冲区溢出或损坏的变量

c++ - srand() + rand() 局部作用域

matlab - 在 Matlab 图形中绘制图例

c++ - 在 Linux 中编译 C++ 控制台应用程序

c++ - 如何从 S 函数调用 matlab 变量?

opencv - python 3.7版本下anaconda无法安装opencv

c++ - 跟踪目标问题的均值漂移算法计算搜索窗口的质心更新

c++ - 从 cmd 运行 cl.exe