基于OpenCV的图像匹配----模板匹配(一)

article/2025/11/9 17:53:18

我先介绍一下模板匹配的原理

原图像:我们期望找到与模板图像匹配的图像

模板图像:将于模板图像进行比较的图像

一次移动一个像素(从左到右,从上到下)。在每个位置,计算相似度度量,以便它表示在该位置处的匹配的“好”还是“坏”。

下面直接用opencv进行实现

头文件

#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"

定义一些后面要用到的图像

	Mat srcImage; //原图像Mat templateImage;//模板图像Mat resultImage; //输出结果

载入原图像和模板图像

srcImage = imread("map.png", 1);
templateImage = imread("img1.png", 1);
/*Mat imread(const string& filename, int flags)filename为文件路径flags为读入类型,-1为解码得到的图像,0为单通道读入图像,即灰白图像,1为三通道读入图像,即彩色        图像
*/

初始化用于结果输出的矩阵

int resultImage_rows = srcImage.rows - templateImage.rows + 1;
int resultImage_cols = srcImage.cols - templateImage.cols + 1;
resultImage.create(resultImage_rows, resultImage_cols, CV_32FC1);
/*create(rows,cols,type)CV_32FC1为单通道图像,CV_32FC3为三通道图像*/

进行匹配和标准化

matchTemplate(srcImage, templateImage, resultImage, MatchMethod);
/*void matchTemplate(InputArray image, InputArray temp, OutputArray result, int         method)image: 输入原图像temp: 输入模板图像result: 输出的相关系数矩阵method: 匹配方法平方差匹配法CV_TM_SQDIFF归一化平方差匹配法CV_TM_SQDIFF_NORMED相关匹配法CV_TM_CCORR归一化相关匹配法CV_TM_CCORR_NORMED相关系数匹配法CV_TM_CCOEFF归一化相关系数匹配法CV_TM_CCOEFF_NORMED
*/

 这五种匹配方法的公式分别是

normalize(resultImage, resultImage, 0, 1, NORM_MINMAX, -1, Mat());
/*void normalize(const InputArray src, OutputArray dst, double alpha, double beta, int normType, int rtype, InputArray mask)src为输入数组dst为输出数组alpha为规范下限beta为规范上限normtype为公式类型rtype为负数时,输出数组的type与输入数组的type相同;否则,输出数组与输入数组只是通道数相同mask为掩膜,选择感兴趣区域,选定后只能对该区域进行操作。Mat()代表整幅图像
*/

通过函数 minMaxLoc 定位最匹配的位置

double minValue; double maxValue; Point minLocation; Point maxLocation;
/*定义最大值、最小值和最大值位置、最小值位置*/Point matchLocation;minMaxLoc(resultImage, &minValue, &maxValue, &minLocation, &maxLocation, Mat());
/*寻找图像中最小值最大值及它们的位置void minMaxLoc(InputArray src, double* minVal, double* maxVal=0, Point* minLoc=0,     Point* maxLoc=0, InputArray mask=noArray())src:输入图像。minVal:最小值,可輸入NULL表示不需要。maxVal :最大值,可輸入NULL表示不需要。minLoc:最小值的位置,可输入NULL表示不需要,Point类型。maxLoc:最大值的位置,可输入NULL表示不需要,Point类型。mask:可有可无的掩模。
*/

对于方法 SQDIFF 和 SQDIFF_NORMED, 越小的数值有着更高的匹配结果. 而其余的方法, 数值越大匹配效果越好

if (MatchMethod == TM_SQDIFF || MatchMethod == TM_SQDIFF_NORMED){matchLocation = minLocation;}else{matchLocation = maxLocation;}

绘制出矩形,并显示最终结果

rectangle(tempImage, matchLocation, Point(matchLocation.x + templateImage.cols, matchLocation.y + templateImage.rows), Scalar(0, 0, 255), 2, 8, 0);
/*void cvRectangle( CvArr* img, CvPoint pt1, CvPoint pt2, CvScalar color,int thickness=1, int line_type=8, int shift=0 );img: 图像.pt1: 矩形的一个顶点。pt2: 矩形对角线上的另一个顶点color: 线条颜色 (RGB) 或亮度(灰度图像 )(grayscale image)。thickness: 组成矩形的线条的粗细程度。取负值时(如 CV_FILLED)函数绘制填充了色彩的矩形。line_type: 线条的类型。见cvLine的描述shift: 坐标点的小数点位数。
*/

源代码的下载链接:

https://download.csdn.net/download/weixin_42521239/11147622

如果没有积分的小伙伴也可以在评论里留下你的邮箱,我发给你。


http://chatgpt.dhexx.cn/article/JOX1OeJy.shtml

相关文章

OpenCV图像处理——模板匹配

总目录 图像处理总目录←点击这里 十一、模板匹配 11.1、原理 找一个图片上有的模板,和原图像进行模板匹配模板图像在待匹配图像上滑动,记录下每次滑动后的参数值(如平方差,相关性)。寻找最小值或最大值&#xff0…

OpenCV模板匹配算法详解

本博客在https://www.cnblogs.com/zhaoweiwei/p/OpenVC_matchTemplate.html基础上进行更加详细的注解。当初有几个地方看的比较费劲,但是里面没有注释,现给加上,主要是那些带黄色及红色部分的注释。 在此向weiwei22844致敬。 模板匹配是在一…

OpenCV 模板匹配(Template Match)

文章目录 模板匹配介绍模板匹配定义匹配算法平方差归一化的平方差相关性归一化的相关性相关性系数归一化的相关性系数 相关API代码示例 模板匹配介绍 模板匹配定义 模板匹配就是在整个图像区域发现与给定子图像匹配的小块区域。 所以模板匹配首先需要一个模板图像T&#xff…

OpenCV 模板匹配

模板匹配就是在大图中找小图,也就说在一幅图像中寻找另一幅模板图像的位置。 案例来源于傅老师。 模板匹配的操作方法是将模板图像B在图像A上滑动,遍历所有像素以完成匹配。 工作原理:在带检测图像上,从左到右,从上…

13 -- OpenCV学习—模板匹配

模板匹配 1.模板匹配 模板匹配:在给定的模板中查找最相似的区域 实现流程: 准备两幅图像 (1)原图 (2)模板图滑动模板块和原图像进行比对对于每个像素位置。将计算结果存在矩阵中,输入图像大小…

opencv模板匹配步骤及Code

opencv模板匹配步骤及Code 首先介绍一下模板匹配的适用场景: 1、图像检索 2、目标跟踪 简单的说,模板匹配最主要的功能就是在一幅图像中去寻找和另一幅模板图像中相似度最高的部分,这就是模板匹配。 比如,在下面这图片中: 我们要…

OpenCV 学习笔记(模板匹配)

OpenCV 学习笔记(模板匹配) 模板匹配是在一幅图像中寻找一个特定目标的方法之一。这种方法的原理非常简单,遍历图像中的每一个可能的位置,比较各处与模板是否“相似”,当相似度足够高时,就认为找到了我们的…

OpenCV-模板匹配 单个对象匹配、多个对象匹配

目录 概念步骤单个对象匹配代码实现一代码实现二 多个对象匹配代码实现 概念 模板匹配与剪辑原理很像,模板在原图像上从原点开始浮动,计算模板(图像被模板覆盖的地方)的差别程度,这个差别程度的计算方法在opencv里有六…

openCV——模板匹配

单模板匹配 import cv2 #opencv读取的格式是BGR import numpy as np import matplotlib.pyplot as plt#Matplotlib是RGB %matplotlib inline def cvshow(name, ndarray):img cv2.imshow(name, ndarray)cv2.waitKey(0)cv2.destroyAllWindows()模板匹配是指在当前图像 A 内寻找…

Python+Opencv实现模板匹配

目录 一、模板匹配简介二、传统模板匹配算法不足之处三、多尺度模板匹配实现步骤四、多尺度模板匹配实现代码五、多尺度模板匹配效果展示和分析六、思维扩展参考资料注意事项 一、模板匹配简介 所谓的模板匹配,即在给定的图片中查找和模板最相似的区域,该…

OpenCV数字图像处理实战二:模板匹配(C++)

OpenCV数字图像处理实战二:模板匹配(C) 1、模板匹配原理 模板匹配(TemplateMatching)就是在一幅图像中寻找和模板图像(template)最相似的区域,模板匹配不是基于直方图的&#xff0…

opencv 模板匹配形状匹配

文章目录 1. 找圆垫子1.1 得到模板1.2 形状匹配 2. 找瓜子 这是第四次作业要求 所以今天就趁机会讲讲模板匹配,正好之前的项目有一部分重要工作就是和模板匹配紧密相关,对于今天作业来说,之前的项目难度更大,因为涉及到许多要考虑…

Opencv——图像模板匹配

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

OpenCV-模板匹配cv::matchTemplate

作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 函数原型 void matchTemplate( InputArray image, InputArray templ,OutputArray result, int method, InputArray mask noArr…

OPENCV多种模板匹配使用对比

前文简单提到模板匹配中的一种:NCC多角度模板匹配,博主结合实际的检测项目(已落地)发现其准确率和稳定性有待提升,特别是一些复杂背景的图形,又或是模板选取不当都会造成不理想的效果;同时也借鉴…

基于opencv的模板匹配详解

1.什么是模板匹配 在OpenCV教程中这样解释模板匹配: 模板匹配是一项在一幅图像中寻找与另一幅模板图像最匹配(相似)部分的技术。这里说的模板是我们已知的小图像,模板匹配就是在一副大图像中搜寻目标。模板就是我们已知的在图中要找的目标,…

OpenCV模板匹配(cv2.matchTemplate)

目录 摘要正文OpenCV模板匹配(cv2.matchTemplate)什么是模板匹配?OpenCV的 “cv2.matchTemplate” 函数配置开发环境项目结构使用OpenCV实施模板匹配OpenCV模板匹配结果总结 摘要 在本教程中,您将学习如何使用OpenCV和cv2.matchTe…

Opencv (C++)系列学习---模板匹配

目录 1.模板匹配的定义 2.API介绍 3.寻找最优匹配位置(匹配后的配套操作) 4.具体代码 1.模板匹配的定义 模板匹配就是在整个图像区域发现与给定子图像匹配的小块区域,该匹配方法并不是基于直方图,而是使用一个图像块在输入图像…

【OpenCV--模板匹配】

目录 一、模板匹配 1.定义: 2.实现: 二、霍夫线检测 1.原理: 2.实现: 三、霍夫圆检测 1.描述: 2.用法: 一、模板匹配 1.定义: 模板匹配就是在给定的图片中,查找和模板最相似的区域…

OpenCV学习笔记(十一)——模板匹配

模板匹配是指在当前图像A内寻找与图像B最相似的部分,一般将图像A称为输入图像,将图像B称为模板图像。模板匹配的操作方法是将模板图像B在图像A上滑动,遍历所有像素以完成匹配。 OpenCV学习笔记(十一) 1. 模板匹配基础2. 多模板匹配…