OPENCV C++(十二)模板匹配

这篇具有很好参考价值的文章主要介绍了OPENCV C++(十二)模板匹配。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

正常模板匹配函数

matchTemplate(img, templatee, resultMat, 0);//模板匹配

 这里0代表的是方法,一般默认为0就ok 

img是输入图像 templatee是模板 resultmat是输出

1、cv::TM_SQDIFF:该方法使用平方差进行匹配,因此最佳的匹配结果在结果为0处,值越大匹配结果越差。

2、cv::TM_SQDIFF_NORMED:该方法使用归一化的平方差进行匹配,最佳匹配也在结果为0处。

3、cv::TM_CCORR:相关性匹配方法,该方法使用源图像与模板图像的卷积结果进行匹配,因此,最佳匹配位置在值最大处,值越小匹配结果越差。

4、cv::TM_CCORR_NORMED:归一化的相关性匹配方法,与相关性匹配方法类似,最佳匹配位置也是在值最大处。

5、cv::TM_CCOEFF:相关性系数匹配方法,该方法使用源图像与其均值的差、模板与其均值的差二者之间的相关性进行匹配,最佳匹配结果在值等于1处,最差匹配结果在值等于-1处,值等于0直接表示二者不相关。

6、cv::TM_CCOEFF_NORMED:归一化的相关性系数匹配方法,正值表示匹配的结果较好,负值则表示匹配的效果较差,也是值越大,匹配效果也好。

对于输出的说明:

就是说result图像中的每一个点的值代表了一次相似度比较结果。

 如图可知,模板在待测图像上每次在横向或是纵向上移动一个像素,并作一次比较计算,由此,横向比较W-w+1次,纵向比较H-h+1次,从而得到一个(W-w+1)×(H-h+1)维的结果矩阵,result即是用图像来表示这样的矩阵,因而图像result的大小为(W-w+1)×(H-h+1)。匹配结果图像与原图像之间的大小关系,他们之间差了一个模板大小。

对输出值的归一化

 

normalize(resultMat, resultMat, 0, 1, NORM_MINMAX, -1, Mat());//归一化

找出最佳匹配的位置:

	double minVal; double maxVal; Point minLoc; Point maxLoc;
	Point matchLoc;
	minMaxLoc(resultMat, &minVal, &maxVal, &minLoc, &maxLoc, Mat());
	matchLoc = minLoc;

 我们这里选择了最小值的位置,因为我们选的第一种方法也就是值越小越好,其他方法有可能是选最大的位置!!

在图像画出匹配最佳:  

	Mat dispmat;
	img.copyTo(dispmat);
	rectangle(dispmat, matchLoc, Point(matchLoc.x + templatee.cols, matchLoc.y + templatee.rows),CV_RGB(0,255,0), 2, 8, 0);

	imshow("dispmat", dispmat);
	waitKey(0);
	destroyAllWindows();

结果显示

OPENCV C++(十二)模板匹配,opencv,c++,人工智能



利用opencv自带选取roi+模板匹配,进行简单的人脸追踪识别 

选取roi

	if (cnt == 0) {
			Rect2d r;
			r = selectROI(frame, true);
			tempMat = frame(r);
			tempMat.copyTo(refMat);
			destroyAllWindows();
		}

 完整代码:  

	VideoCapture cap(0);
	Mat frame;
	Mat tempMat;
	Mat refMat;
	Mat dispMat;
	Mat resultMat;

	int cnt = 0;
	while (1) {
		
		cap >> frame;
		if (cnt == 0) {
			Rect2d r;
			r = selectROI(frame, true);
			tempMat = frame(r);
			tempMat.copyTo(refMat);
			destroyAllWindows();
		}
		imshow("template", refMat);
		int match_method = 0;
		matchTemplate(frame, refMat, resultMat, match_method);
		normalize(resultMat, resultMat, 0, 1, NORM_MINMAX, -1, Mat());
		double minVal; double maxVal; Point minLoc; Point maxLoc;
		Point matchLoc;
		minMaxLoc(resultMat, &minVal, &maxVal, &minLoc, &maxLoc, Mat());
		if (match_method == TM_SQDIFF || match_method == TM_SQDIFF_NORMED)
		{
			matchLoc = minLoc;
		}
		else
		{
			matchLoc = maxLoc;
		}
		frame.copyTo(dispMat);


		rectangle(dispMat, matchLoc, Point(matchLoc.x + refMat.cols, matchLoc.y + refMat.rows), Scalar::all(0), 2, 8, 0);
		cnt++;
		//imshow("template", refMat);
		imshow("dispMat", dispMat);
		waitKey(30);

至此opencv基础学习到此结束 后期学习一些进阶自学内容。

************************************************----***********************************************************文章来源地址https://www.toymoban.com/news/detail-645357.html

到了这里,关于OPENCV C++(十二)模板匹配的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 人工智能-OpenCV+Python实现人脸识别(人脸检测)

    在OpenCV中使用Haar特征检测人脸,那么需要使用OpenCV提供的xml文件(级联表)在haarcascades目录下。这张级联表有一个训练好的AdaBoost训练集。首先要采用样本的Haar特征训练分类器,从而得到一个级联的AdaBoost分类器。Haar特征值反映了图像的灰度变化情况。例如:脸部的一些特征

    2024年02月06日
    浏览(81)
  • 基于 NCC/灰度信息 的模板匹配算法(QT + Opencv + C++),10ms内获取匹配结果,部分源码

    文后代码,优化效果图结尾处,最快3ms得到匹配结果 NCC,全称为Normalized Cross Correlation,即归一化互相关系数, 在模板匹配中使用的非常非常广泛,也是众多模板匹配方法中非常耀眼的存在, 这个匹配的理论核心基础公式如下: 其实Opencv的matchTemplate函数使用的就是这个公式

    2024年02月08日
    浏览(34)
  • 人工智能算法工程师面试题——之OpenCV必背汇总(四)

    在OpenCV中,图像融合通常指的是将两个或更多图像以某种方式组合在一起,以创建一个新的图像。这个过程可以用于多种目的,比如艺术效果、图像修复或信息增强。实现图像融合的一种常见方法是通过加权求和,也就是每个像素位置上将不同图像的像素值按照一定的权重相

    2024年02月21日
    浏览(39)
  • OpenCV 模板匹配 matchTemplate

    模板匹配是一项在一副图像中寻找与另一幅模板图像最匹配(相似)部分的技术。模板匹配不是基于直方图的,而是通过在输入图像上滑动图像块(模板)同时对比相似度,来对模板和输入图像进行匹配的一种方法。 应用: (1)目标查找定位 (2)运动物体跟踪 image:待搜

    2024年02月04日
    浏览(49)
  • OpenCV(十九):模板匹配

    1.模板匹配:      OpenCV提供了一个模板匹配函数,用于在图像中寻找给定模板的匹配位置。 2.图像模板匹配函数matchTemplate  void matchTemplate( InputArray image, InputArray templ, OutputArray result, int method, InputArray mask = noArray() ); image:待模板匹配的原图像,图像数据类型为CV 8U和CV 32F两者中

    2024年02月09日
    浏览(30)
  • Opencv——图像模板匹配

    什么是模板匹配呢? 看到这里大家是否会觉得很熟悉的感觉涌上心头!在人脸识别是不是也会看见 等等。 模板匹配可以看作是对象检测的一种非常基本的形式。使用模板匹配,我们可以使用包含要检测对象的“模板”来检测输入图像中的对象。 参数:(img: 原始图像、

    2024年02月16日
    浏览(29)
  • opencv#27模板匹配

         例如给定一张图片,如上图大矩阵所示,然后给定一张模板图像,如上图小矩阵。      我们在大图像中去搜索与小图像中相同的部分或者是最为相似的内容。比如我们在图像中以灰色区域给出一个与模板图像尺寸大小一致的区域,通过比较灰色区域中的内容与模板中

    2024年01月23日
    浏览(31)
  • 用OpenCV进行模板匹配

    今天我们来研究一种传统图像处理领域中对象检测和跟踪不可或缺的方法——模板匹配,其主要目的是为了在图像上找到我们需要的图案,这听起来十分令人兴奋。 所以,事不宜迟,让我们直接开始吧! 模板匹配的算法的核心十分简单:它将模板与源图像中的每个部分进行

    2024年02月10日
    浏览(33)
  • OpenCV中的模板匹配

    OpenCV中的模板匹配 模板匹配是一项常见的计算机视觉任务,其目的是从输入图像中找到与给定模板最相似的部分。在OpenCV中,我们可以使用模板匹配算法来识别某个图案或对象在另一个图像中的位置。本文将介绍如何使用OpenCV进行模板匹配,并提供相应的源代码。 1.读取图像

    2024年02月06日
    浏览(33)
  • opencv 多角度模板匹配

    总结一下实现多角度模板匹配踩的坑 一 、多角度匹配涉及到要使用mask,首先opencv matchTemplateMask自带的源码如下: 可以看到使用用了四次dft来计算卷积,目标图像要与mask卷三次,来计算目标图像在模板区域内的和,平方和。其中最后一次CCorr(I, mask2)可以省略掉,它跟CCorr(I

    2024年02月07日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包