我的其他文章
更多文章正在写作过程中。
基础知识点
模板匹配意思就是找一副已经存在的图片,从其他图片中查找近似的图片,接下来我们准备两幅大图,一副小图

准备两幅大图,监控里面的截图并且时间不一样,角度也不一样
图片一

图片二

可以看出两幅图片是不一样的,由于摄像头角度偏摆,部分图片并不一样,角度也不一致
show me the code
#include
#include
#include
#include
#include
using namespace std; using namespace cv; int main() {
Mat img,img2, templ, result,result2; img = imread("./big.jpg"); img2 = imread("./big2.jpg"); templ = imread("./temp.jpg"); imshow("t1", templ); int result_cols = img.cols - templ.cols + 1; int result_rows = img.rows - templ.rows + 1; result.create(result_cols, result_rows, CV_32FC1); //matchTemplate(img, templ, result, TM_SQDIFF_NORMED);//这里我们使用的匹配算法是标准平方差匹配 method=CV_TM_SQDIFF_NORMED,数值越小匹配度越好 matchTemplate(img, templ, result, TM_CCOEFF_NORMED);//数值越小匹配度越好 matchTemplate(img2, templ, result2, TM_CCOEFF_NORMED);//数值越小匹配度越好 normalize(result, result, 0, 1, NORM_MINMAX, -1, Mat()); normalize(result2, result2, 0, 1, NORM_MINMAX, -1, Mat()); double minVal = -1; double maxVal; Point minLoc; Point maxLoc; Point matchLoc; //cout << "匹配度:" << minVal << endl; minMaxLoc(result, &minVal, &maxVal, &minLoc, &maxLoc, Mat()); cout << "匹配度 min:" << minVal<<" max:" <<maxVal<< endl; //matchLoc = minLoc; matchLoc = maxLoc; rectangle(img, matchLoc, Point(matchLoc.x + templ.cols, matchLoc.y + templ.rows), Scalar(0, 255, 0), 2, 8, 0); imshow("img", img); minMaxLoc(result2, &minVal, &maxVal, &minLoc, &maxLoc, Mat()); cout << "匹配度 min:" << minVal << " max:" << maxVal << endl; matchLoc = maxLoc; rectangle(img2, matchLoc, Point(matchLoc.x + templ.cols, matchLoc.y + templ.rows), Scalar(0, 255, 0), 2, 8, 0); imshow("img2", img2); waitKey(0); return 0; }
执行
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/228013.html原文链接:https://javaforall.net
