opencv实现边缘模板匹配

在OpenCV中使用C++进行模板匹配时,如果你想利用边缘特征来提高匹配的鲁棒性,可以结合边缘检测算法(如Canny)来提取图像和模板的边缘信息,然后在这些边缘图像上进行模板匹配

python 复制代码
#include <opencv2/opencv.hpp>
#include <iostream>

using namespace cv;
using namespace std;

int main() {
    // 加载图像和模板
    Mat img = imread("image.jpg", IMREAD_GRAYSCALE);
    Mat templ = imread("template.jpg", IMREAD_GRAYSCALE);

    if (img.empty() || templ.empty()) {
        cout << "Could not open or find the image or template!" << endl;
        return -1;
    }

    // 使用Canny边缘检测提取图像和模板的边缘
    Mat edges_img, edges_templ;
    Canny(img, edges_img, 50, 150);
    Canny(templ, edges_templ, 50, 150);

    // 创建结果矩阵
    Mat result;
    int result_cols = img.cols - templ.cols + 1;
    int result_rows = img.rows - templ.rows + 1;
    result.create(result_rows, result_cols, CV_32FC1);

    // 进行模板匹配
    matchTemplate(edges_img, edges_templ, result, TM_CCOEFF_NORMED);

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

    // 在原始图像上绘制矩形框标记匹配区域
    Mat img_display;
    cvtColor(img, img_display, COLOR_GRAY2BGR);
    rectangle(img_display, maxLoc, Point(maxLoc.x + templ.cols, maxLoc.y + templ.rows), Scalar(0, 255, 0), 2);

    // 显示结果
    imshow("Source Image", img_display);
    imshow("Template", templ);
    imshow("Edges Image", edges_img);
    imshow("Edges Template", edges_templ);
    imshow("Result", result);

    waitKey(0);
    return 0;
}

测试效果





相关推荐
火山引擎开发者社区几秒前
多行业专家招募|参与访谈最高拿 4000元/h 现金报酬!
人工智能
大模型码小白3 分钟前
数据可视化:AI处理多维数据的HTML5可视化方案
大数据·前端·javascript·人工智能·机器学习·信息可视化·html5
IvorySQL3 分钟前
基于 PostgreSQL 的非线性回归原理与 AI 数据库融合实践
数据库·人工智能·postgresql
甲维斯3 分钟前
GPT6发布了,“O哥”速评!
人工智能
AI增长技术研究院4 分钟前
品牌别名实用指南:维护主名称、别名和禁用名清单
人工智能
字节跳动视频云技术团队7 分钟前
豆包视频通话升级,火山引擎多模态传输系统提供技术支撑
人工智能·音视频开发
j7~10 分钟前
【C++11】C++11 新特性全套详解(列表初始化、右值引用、lambda 表达式、function 与 bind 包装器等)
c++·右值引用·lambda表达式·可变参数模板·移动语义·包装器·c++11发展史
searchforAI11 分钟前
AI自动总结YouTube视频:英文内容一键总结、智能时间戳、视频重点快速看
人工智能·ai·音视频
cxk180827212 分钟前
2026 年9月 AI 营销机构选型方法论:基于 GEO 精采信模式的三维评估体系
大数据·人工智能·科技·ai·geo·昆明geo
威视锐科技13 分钟前
AI-RAN:下一代无线接入网,5G-A迈向6G的智能底座
人工智能·5g·威视锐