QT开发中文网

OpenCV 的 matchTemplate()

OpenCV中的matchTemplate()函数用于在图像中搜索模板并进行匹配。它采用了滑动窗口的方式,在输入图像上以不同位置对模板进行匹配,得到相似度矩阵。

函数原型如下:

void matchTemplate(InputArray image, InputArray templ, OutputArray result, int method);

参数解释:

  • image:输入图像,数据类型为CV_8U、CV_16U或CV_32F。
  • templ:待匹配的模板图像,尺寸小于或等于输入图像。
  • result:输出结果矩阵,用于存储匹配结果。
  • method:指定匹配方法,有多种可选方法(如TM_SQDIFF、TM_CCORR等)。

示例代码:

#include <opencv2/opencv.hpp>

int main()
{
    cv::Mat image = cv::imread("image.jpg", cv::IMREAD_GRAYSCALE);  // 读取灰度图像
    cv::Mat templ = cv::imread("template.jpg", cv::IMREAD_GRAYSCALE);

    if (image.empty() || templ.empty())
    {
        std::cout << "Failed to read images!" << std::endl;
        return -1;
    }

    // 创建输出结果矩阵
    cv::Mat result;
    
    // 使用 TM_CCORR_NORMED 方法进行模板匹配
    cv::matchTemplate(image, templ, result, cv::TM_CCORR_NORMED);

    // 寻找最佳匹配位置
    double minVal, maxVal;
    cv::Point minLoc, maxLoc;
    cv::minMaxLoc(result, &minVal, &maxVal, &minLoc, &maxLoc);

    // 绘制矩形框显示匹配结果
    cv::rectangle(image, maxLoc, cv::Point(maxLoc.x + templ.cols, maxLoc.y + templ.rows), cv::Scalar(0, 255, 0), 2);

    // 显示原始图像和匹配结果
    cv::imshow("Original Image", image);
    cv::imshow("Matching Result", result);
    
    cv::waitKey(0);
    
    return 0;
}

该示例代码读取一幅灰度图像和一个模板图像,使用TM_CCORR_NORMED方法进行模板匹配,并在原始图像中标记出最佳匹配位置的矩形框。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://qt.0voice.com/?id=5610

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?