【问题标题】:Use OpenCV to calculate cross-correlation of two arrays使用 OpenCV 计算两个数组的互相关
【发布时间】:2014-12-03 04:15:26
【问题描述】:

我正在使用 OpenCV 计算取自某个矩阵 X(16x128 维度)的两行的互相关。这就是我所做的:

cv::Mat channel1(1,128,CV_32F, X.row(1).clone());     //take the first row of matrix X
cv::Mat channel2(1,128,CV_32F, X.row(10).clone());    //take the 10th row of matrix X
cv::Mat result;
cvMatchTemplate(channel1,channel2,result, CV_TM_CCORR);

但是,我收到以下错误: “错误:没有构造函数实例“cv::Mat::Mat”与参数列表匹配”。谁能帮我解决这个问题。提前谢谢你。

【问题讨论】:

  • X.row(j) is 已经是一维行 Mat。你不需要围绕它构建一个新的。 (编译器是对的,没有构造函数采用这样的初始化值)。也请使用 cv::matchTemplate,而不是 c-api cvMatchTemplate!

标签: opencv matrix cross-correlation


【解决方案1】:

您发布的代码有几个问题:

1) 没有与您初始化“channel1”和“channel2”矩阵的方式相匹配的 cv::Mat 构造函数实例。

解决方案:

  • 以这种方式声明你的矩阵:

    cv::Mat channel1(X.row(1).clone());     //take the first row of matrix X
    cv::Mat channel2(X.row(10).clone());    //take the 10th row of matrix X
    

2) cvMatchTemplate 是旧式 C-api,(afaik) 与面向 C++ 的 cv::Mat 不兼容。

解决方案:

  • (按照 berak 的建议)改用 cv::matchTemplate。

3) 更好的是,您可以直接使用 matchTemplate:

    cvMatchTemplate(X.row(1).clone(),X.row(10).clone(),result, CV_TM_CCORR);

希望对你有帮助。

【讨论】:

    猜你喜欢
    • 2014-03-06
    • 2011-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-20
    • 2018-08-05
    • 1970-01-01
    相关资源
    最近更新 更多