opencv 模板匹配

Posted qianbo_insist

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了opencv 模板匹配相关的知识,希望对你有一定的参考价值。

我的其他文章

AKAZE 局部特征匹配
级联分类器使用
等比例缩放图片
给图片加logo
鱼眼校正
智能答卷识别
opencv滤镜效果
灰度图像增强方式

更多文章正在写作过程中。

基础知识点

模板匹配意思就是找一副已经存在的图片,从其他图片中查找近似的图片,接下来我们准备两幅大图,一副小图

小图
准备两幅大图,监控里面的截图并且时间不一样,角度也不一样
图片一
大图一
图片二
在这里插入图片描述
可以看出两幅图片是不一样的,由于摄像头角度偏摆,部分图片并不一样,角度也不一致

show me the code

#include <opencv2/core/core.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <iostream>
#include <stdio.h>

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

执行

结果如下:
最终结果
从两幅图片中都找到了匹配。

以上是关于opencv 模板匹配的主要内容,如果未能解决你的问题,请参考以下文章

OpenCV模板匹配 - 如何确定匹配模板的角度

opencv - 匹配模板

OpenCV:快速模板匹配算法

实战 | OpenCV实现多角度模板匹配(详细步骤 + 源码)

OpenCV在限定的ROI中进行模版匹配问题,求指点!!

Android - 具有阈值的 OpenCV 模板匹配