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

测试效果





相关推荐
Roselind_Yi1 分钟前
【吴恩达2026 Agentic AI】面试向+项目实战(含面试题+项目案例)-4
人工智能·面试·职场和发展·实时互动·跳槽·社交电子·学习方法
乐鑫科技 Espressif2 分钟前
亚马逊 KVS WebRTC SDK 适配乐鑫芯片及 ESP RainMaker Camera
人工智能·webrtc·乐鑫科技
王璐WL2 分钟前
【C++】经典且易错的题
c++
前端摸鱼匠2 分钟前
【AI大模型春招面试题15】自回归(Autoregressive)与自编码(Autoencoding)语言模型的区别?
人工智能·语言模型·面试·回归·大模型·求职招聘
AI程序员3 分钟前
Claude Code 的三种多 Agent 模式:Coordinator、Swarm 和 Fork
人工智能
feasibility.5 分钟前
OpenCV图像滤波算法应用:常见滤波器的原理与效果对比(含c++/python代码与中文显示)
c++·opencv·算法
AI程序员6 分钟前
Claude Code 的三层记忆系统:从"一次性对话"到"有记性的搭档"
人工智能
Lethehong6 分钟前
从零搭建 BettaFish:打造自己的多 Agent 舆情分析系统
人工智能·docker·开源·蓝耘元生代·蓝耘maas
Kelvin4real6 分钟前
10分钟速通 ACP 协议:LLM 生态的标准化时代
人工智能
monsion7 分钟前
Claude Code 的三种多 Agent 模式:Coordinator、Swarm 和 Fork
人工智能·vscode·个人开发