opencv模板匹配步骤及Code

article/2025/11/9 18:43:01

opencv模板匹配步骤及Code

首先介绍一下模板匹配的适用场景:
1、图像检索
2、目标跟踪
简单的说,模板匹配最主要的功能就是在一幅图像中去寻找和另一幅模板图像中相似度最高的部分,这就是模板匹配。
比如,在下面这图片中:
待检测图片
我们要在上面这幅图片中寻找下面这位女团成员的头像:
模板图像
使用模板匹配后的寻找结果如下图所示:
匹配结果
接下来看一下opencv中的模板匹配的具体用法吧。
我将模板匹配的步骤分割如下:
步骤一:读取图片
code:

cv::Mat img1 = cv::imread("C:\\Users\\Administrator\\Desktop\\tmp.png");
cv::Mat img2 = cv::imread("C:\\Users\\Administrator\\Desktop\\tmp1.png");

步骤二:创建一个空画布用来绘制匹配结果
code:

cv::Mat dstImg;
dstImg.create(img1.dims,img1.size,img1.type());
cv::imshow("createImg",dstImg);

步骤三:匹配,最后一个参数为匹配方式
code:

cv::matchTemplate(img1, img2, dstImg, 0);

步骤四:归一化图像矩阵,可省略
code:

cv::normalize(dstImg, dstImg, 0, 1, 32);

步骤五:获取最大或最小匹配系数
code:

//首先是从得到的 输出矩阵中得到 最大或最小值(平方差匹配方式是越小越好,所以在这种方式下,找到最小位置)
//找矩阵的最小位置的函数是 minMaxLoc函数
cv::Point minPoint;
cv::Point maxPoint;
double *minVal = 0;
double *maxVal = 0;
cv::minMaxLoc(dstImg, minVal, maxVal, &minPoint,&maxPoint);

步骤六:开始正式绘制
code:

cv::rectangle(img1, minPoint, cv::Point(minPoint.x + img2.cols, minPoint.y + img2.rows),  	cv::Scalar(0,255,0), 2, 8);
cv::imshow("【匹配后的图像】", img1);cv::rectangle(dstImg, minPoint, cv::Point(minPoint.x + img2.cols, minPoint.y + img2.rows), cv::Scalar(0,0,0), 2, 8);
cv::imshow("【匹配后的计算过程图像】", dstImg);
cv::waitKey(0);

函数介绍

	void cv::matchTemplate(cv::InputArray image, // 用于搜索的输入图像cv::InputArray templ, // 用于匹配的模板,和image类型相同cv::OutputArray result, // 匹配结果图像int method // 用于比较的方法)

参数解释:
InputArray Image: 待搜索的图像,且图像必须为8-bit或32-bit的浮点型图像
InputArray templ: 用于进行模板匹配的模板图像,类型和原图像一致,但是尺寸不能大于原图像
OutputArray result: 模板搜索结果输出图像,必须为单通道32-bit位浮点型图像,如果图像尺寸是WxH而template尺寸是wxh,则此参数result一定是(W-w+1)x(H-h+1)
int method: 模板匹配计算类型,共6种,将在下面进行简单介绍
InputArray mask=noArray(): 图像匹配时用的掩膜板,必须和模板图像有相同的数据类型和尺寸

在OpenCV中提供了6种匹配度量方法。
(1).平方差匹配法CV_TM_SQDIFF
(2)归一化平方差匹配法CV_TM_SQDIFF_NORMED
(3)相关匹配法CV_TM_CCORR
(4)归一化相关匹配法CV_TM_CCORR_NORMED
(5)系数匹配法CV_TM_CCOEFF
(6)化相关系数匹配法CV_TMCCOEFF_NORMED
通常来讲,随着从简单测量方法(平方差)到更复杂的测量方法(相关系数法),我们可以获得越来越准确的匹配。然而这同时也会以越来越大的计算量为代价。对于选取何种方法,针对不同的匹配情况进行对此分析比较,选取更适合自己应用场景同时兼顾速度和精度的最佳方案。
注意
值得注意的是对于方法SQDIFF和SQDIFF_NORMED两种方法来讲,越小的值就有着更高的匹配结果,而其余的方法则是数值越大匹配效果越好。

void cv::minMaxLoc  (   InputArray      src,double *    minVal,double *    maxVal = 0,Point *     minLoc = 0,Point *     maxLoc = 0,InputArray      mask = noArray() )

参数解释:
InputArray src:输入的单通道数组
*double minVal:double类型指针,返回最小值,如果没有定义返回NULL
double
maxVal:同上,返回最大值
Point
minLoc=0:Point类型的指针,在二维图像中返回最小值的位置坐标,如果没有定义返回NULL
*Point maxLoc=0: **Point同上,返回最大位置坐标
InputArray mask=noArray():可选掩膜

完整代码:

#include <iostream>
#include <opencv2/core.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/imgproc.hpp>
using namespace std;
using namespace cv;void main()
{
//步骤一:读取图片cv::Mat img1 = cv::imread("C:\\Users\\Administrator\\Desktop\\tmp.png");cv::Mat img2 = cv::imread("C:\\Users\\Administrator\\Desktop\\tmp1.png");cv::imshow("【被查找的图像】", img1);cv::imshow("【模版图像】", img2);//步骤二:创建一个空画布用来绘制匹配结果cv::Mat dstImg;dstImg.create(img1.dims,img1.size,img1.type());cv::imshow("createImg",dstImg);//步骤三:匹配,最后一个参数为匹配方式,共有6种,详细请查阅函数介绍cv::matchTemplate(img1, img2, dstImg, 0);//步骤四:归一化图像矩阵,可省略cv::normalize(dstImg, dstImg, 0, 1, 32);//步骤五:获取最大或最小匹配系数
//首先是从得到的 输出矩阵中得到 最大或最小值(平方差匹配方式是越小越好,所以在这种方式下,找到最小位置)
//找矩阵的最小位置的函数是 minMaxLoc函数cv::Point minPoint;cv::Point maxPoint;double *minVal = 0;double *maxVal = 0;cv::minMaxLoc(dstImg, minVal, maxVal, &minPoint,&maxPoint);//步骤六:开始正式绘制cv::rectangle(img1, minPoint, cv::Point(minPoint.x + img2.cols, minPoint.y + img2.rows), cv::Scalar(0,255,0), 2, 8);cv::imshow("【匹配后的图像】", img1);cv::rectangle(dstImg, minPoint, cv::Point(minPoint.x + img2.cols, minPoint.y + img2.rows), cv::Scalar(0,0,0), 3, 8);cv::imshow("【匹配后的计算过程图像】", dstImg);cv::waitKey(0);

如果觉得博主的文章对您有所帮助,记得关注一下呦!您的支持就是我不断更新下去的最强动力。

如有不对的地方请指正,谢谢
有需要深度学习及机器视觉相关开发环境的可加博主QQ获取,有问题请联系下方QQ直接与博主本人交流。博主会定期更新视觉相关算法使用及实际项目讲解,谢谢各位
博主QQ:2021907249


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

相关文章

OpenCV 学习笔记(模板匹配)

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

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

目录 概念步骤单个对象匹配代码实现一代码实现二 多个对象匹配代码实现 概念 模板匹配与剪辑原理很像&#xff0c;模板在原图像上从原点开始浮动&#xff0c;计算模板&#xff08;图像被模板覆盖的地方&#xff09;的差别程度&#xff0c;这个差别程度的计算方法在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实现模板匹配

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

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

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

opencv 模板匹配形状匹配

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

Opencv——图像模板匹配

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

OpenCV-模板匹配cv::matchTemplate

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

OPENCV多种模板匹配使用对比

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

基于opencv的模板匹配详解

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

OpenCV模板匹配(cv2.matchTemplate)

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

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

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

【OpenCV--模板匹配】

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

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

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

opencv中的模板匹配

1 匹配函数 opencv 提供了一个专门用于模板匹配的函数 cv::matchTemplate();其调用方式如下&#xff1a; void cv::matchTemplate(cv::InputArray image, // 用于搜索的输入图像, 8U 或 32F, 大小 W-Hcv::InputArray templ, // 用于匹配的模板&#xff0c;和image类型相同&am…

【论文译文】BigGAN

译文仅供参考&#xff01; 原文是pdf&#xff0c;想下载的话可以戳&#xff1a;http://www.gwylab.com/pdf/biggan_chs.pdf

WGAN、WGAN-GP、BigGAN

一、WGAN概述 WGAN论文地址&#xff1a;https://arxiv.org/abs/1701.07875 在这篇论文中&#xff0c;作者研究了不同的测量方法&#xff0c;来描述模型生成样本和证实样本之间分布差距&#xff0c;或者说&#xff0c;不同的散度定义&#xff0c;在对比之后&#xff0c;认为EM…

tf hub bigGan 猫变狗

原文链接: tf hub bigGan 猫变狗 上一篇: tf hub mobile_net 使用 下一篇: tf hub 使用缓存 数据 根据输入的标签和噪声生成指定类别的图片&#xff0c;类似infogan 每次向着目标前进一小步&#xff0c;将其中的过程变化记录下来 import tensorflow as tf import n…

(2018, BigGAN)用于高保真自然图像合成的大规模 GAN 训练

Large scale gan training for high fidelity natural image synthesis 公众号&#xff1a;EDPJ 目录 0. 摘要 1. 简介 2. 背景 3. 扩展 GAN 3.1 使用截断技巧权衡多样性和保真度 3.2 总结 4. 分析 4.1 表征不稳定性&#xff1a;生成器 4.2 表征不稳定性&#xff1…

深度解读DeepMind新作:史上最强GAN图像生成器—BigGAN

在碎片化阅读充斥眼球的时代&#xff0c;越来越少的人会去关注每篇论文背后的探索和思考。 在这个栏目里&#xff0c;你会快速 get 每篇精选论文的亮点和痛点&#xff0c;时刻紧跟 AI 前沿成果。 点击本文底部的「阅读原文」即刻加入社区&#xff0c;查看更多最新论文推荐。 这…