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;
}

测试效果





相关推荐
马***4112 小时前
适配成人英语学习痛点,打造落地性强的学习辅助方式
人工智能·学习
夜焱辰2 小时前
浏览器端 Agent 的文件版本管理:不用 Git,基于 OPFS + SQLite 自己造了一个
前端·人工智能
Ricky05533 小时前
CTRL-WORLD:一种用于机器人操控的可控生成世界模型(中美2025年联合研究)
人工智能·机器人·世界模型
jeffer_liu3 小时前
Spring AI 生产级实战:工具调用
java·人工智能·后端·spring·ai编程
阿乔外贸日记3 小时前
2026尼日利亚五项清关政策更新,拉高能源装备进口综合成本
大数据·人工智能·搜索引擎·智能手机·云计算·能源
民乐团扒谱机3 小时前
【AI笔记】短时纯音时长对音高感知偏移效应研究综述
人工智能·笔记
侃谈科技圈3 小时前
破除数据中台落地困境:2026数据治理平台差异化能力与选型决策指南
大数据·人工智能
大象说4 小时前
Python多进程共享队列无报错僵死 120G Nginx访问日志清洗踩坑全记录
人工智能·自然语言处理
Cosolar4 小时前
AutoGen 精通教程:从零到企业级多 Agent 系统架构师
人工智能·后端·面试
甲维斯4 小时前
Claude Code 省钱小妙招!200K和自动压缩
人工智能