输入一张原图和一张你从原图上扣下来的矩形图,用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; }
在控制台显示匹配出的矩形图左上角坐标:
效果图:
抠出来的矩形图:
标签:srcImg,Mat,maxLoc,tmplImg,opencv,resultImg,图像匹配,cv From: https://www.cnblogs.com/qingfeng66/p/17453343.html