opencv之图像匹配

输入一张原图和一张你从原图上扣下来的矩形图,用opencv寻找到这个区域。代码如下:

#include <opencv2/opencv.hpp>
#include <iostream>

int main()
{
    // 读取源图像和模板
    cv::Mat srcImg = cv::imread("targe_graph.jpg");
    cv::Mat tmplImg = cv::imread("template.jpg");

    // 创建结果图像矩阵
    cv::Mat resultImg;
    int resultCols = srcImg.cols - tmplImg.cols + 1;
    int resultRows = srcImg.rows - tmplImg.rows + 1;
    resultImg.create(resultRows, resultCols, CV_32FC1);

    // 进行模板匹配
    cv::matchTemplate(srcImg, tmplImg, resultImg, cv::TM_CCOEFF_NORMED);

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

    // 在源图像上标记匹配位置
    cv::Point rectStart = maxLoc;
    cv::Point rectEnd(maxLoc.x + tmplImg.cols, maxLoc.y + tmplImg.rows);
    cv::rectangle(srcImg, rectStart, rectEnd, cv::Scalar(0, 0, 255), 2);

    // 显示矩形框的左上角坐标
    std::cout << "匹配的矩形框的左上角坐标 (" << rectStart.x << ", " << rectStart.y << ")" << std::endl;

    // 显示源图像并等待用户按下任意键退出程序
    cv::imshow("效果图", srcImg);
    cv::waitKey();

    return 0;
}

在控制台显示匹配出的矩形图左上角坐标:

 效果图:

 

抠出来的矩形图:

 

posted @ 2023-06-03 09:47  天天掉头发  阅读(117)  评论(0编辑  收藏  举报
返回顶端