Opencv——图像模板匹配

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

引言

什么是模板匹配呢?

327df6f91bdc433caeb0aaf4ebabd539.pngeabc19158f064318a92b93837724b0b8.pngf41146f204fa4a7a8327a0d6571f9347.pngb42ef5a65f354673be7ebfeb592a4764.png676da60d94b244059893fdacb3f6932c.png

看到这里大家是否会觉得很熟悉的感觉涌上心头!在人脸识别是不是也会看见 等等。

模板匹配可以看作是对象检测的一种非常基本的形式。使用模板匹配,我们可以使用包含要检测对象的“模板”来检测输入图像中的对象。

一、匹配方法:cv2.matchTemplate(img, templ, method)


参数:(img: 原始图像、temple: 模板图像、method: 匹配度计算方法)

方法如下: 

cv2.TM_SQDIFF: 计算平方差,计算结果越小,越相关

公式:

f2d42349cb3044af8a3b1de3e95b3224.png

cv2.TM_CCORR: 计算相关性,计算出来的值越大,越相关

公式:

5959580199b14d46bacfd017385eb220.png

cv2.TM_CCOEFF: 计算相关系数,计算出的值越大,越相关

公式:30e0fcf913844c6eaccca4535fe54e87.png

cv2.TM_SQDIFF_NORMED: 计算归一化平方差,计算结果越接近0,越相关

公式:

3843088607e547a4b6888c4a937b9c4f.png

 

cv2.TM_CCORR_NORMED: 计算归一化相关性,计算结果越接近1,越相关

公式:

c9dfee05a780452ca4c8136d284a57f8.png

cv2.TM_CCOEFF_NORMED: 计算归一化相关系数,计算结果越接近1,越相关

 公式:

9c9800d317044e61a05554357d1a93ba.png

 二、匹配单个对象

img代表原始图像,template代表模板窗口,1默认为cv2.TM_SQDIFF方法

res = cv2.matchTemplate(img, template, 1) 

 获取结果的最值和最值位置(最值位置是左上角的坐标位置,通过模板的宽和高可以在原图上把模板位置画出来)

min_val,max_val,min_loc,max_loc = cv2.minMaxLoc(res)

 完整的代码:

import cv2
import numpy as np
import matplotlib.pyplot as plt
def cv_show(name,img):cv2.imshow(name,img)cv2.waitKey(0)cv2.destroyAllWindows()
img=cv2.imread('C:/Users/bwy/Desktop/7.png',0)
template=cv2.imread('C:/Users/bwy/Desktop/8.png',0)
methods=['cv2.TM_CCOEFF','cv2.TM_CCOEFF_NORMED','cv2.TM_CCORR','cv2.TM_CCORR_NORMED','cv2.TM_SQDIFF','cv2.TM_SQDIFF_NORMED']
for meth in methods:img3=img.copy()method=eval(meth)print(meth)res1=cv2.matchTemplate(img,template,method)min_val,max_val,min_loc,max_loc = cv2.minMaxLoc(res1)if method in [cv2.TM_SQDIFF,cv2.TM_SQDIFF_NORMED]:top_left=min_locelse:top_left=max_locbottom_right=(top_left[0]+w,top_left[1]+h)#俩矩形cv2.rectangle(img3,top_left,bottom_right,255,2)plt.subplot(121),plt.imshow(res1,cmap='gray')plt.xticks([]),plt.yticks([])#隐藏坐标轴plt.subplot(122),plt.imshow(img3,cmap='gray')plt.xticks([]),plt.yticks([])#隐藏坐标轴plt.suptitle(meth)plt.show()

结果如图所示:

13a1be4fdea64e6382e1c1e0b82c9d80.pngfe77e11b39e64761bae6cf6fbb1a1250.png4f055790fd904bbf80ab91223a37d920.png

 20657b44e5e24fe9acd907b607c2ca2e.png5485509ad50c486a90903b8743026810.png4ee91d973af94636925b4d5b2543ec88.png

 多次实验你会发现归一的方法更准确。

 三、匹配多个对象

 1.导包构建函数

import cv2
import numpy as np
import matplotlib.pyplot as plt
def cv_show(name,img):cv2.imshow(name,img)cv2.waitKey(0)cv2.destroyAllWindows()

 2.读入图像转灰度图,改大小。

im=cv2.imread('C:/Users/bwy/Desktop/9.png')
TE=cv2.imread('C:/Users/bwy/Desktop/10.png',cv2.IMREAD_GRAYSCALE)
im1=cv2.resize(im,(600,337))
cv_show('im',im1)
img_=cv2.cvtColor(im1,cv2.COLOR_BGR2GRAY)
TE=cv2.resize(TE,(60,60))
TE.shape

 3.图像匹配

h,w=TE.shape[:2]
r=cv2.matchTemplate(img_,TE,cv2.TM_CCOEFF_NORMED)
cv_show('r',r)

 结果如图所示:

d569f0886ef64efc96598b1709c49889.png

4.取匹配程度大于75%的坐标 ,画在原图上

其中:zip(*) 可理解为解压,返回二维矩阵式。loc中loc[0]是高,loc[1]是宽,[::-1]表示倒序。p[0]代表宽,p[1]代表高

threshold=0.75
loc=np.where(r>=threshold)
for pt in zip(*loc[::-1]):#*代表可选参数bottom_right=(pt[0]+w,pt[1]+h)cv2.rectangle(im1,pt,bottom_right,(0,0,255),1)
cv_show('im1',im1)

 结果如图所示:

ccbaae548edb4889bde8b3244bdb05bf.png

 


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

相关文章

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. 多模板匹配…

opencv中的模板匹配

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

【论文译文】BigGAN

译文仅供参考! 原文是pdf,想下载的话可以戳:http://www.gwylab.com/pdf/biggan_chs.pdf

WGAN、WGAN-GP、BigGAN

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

tf hub bigGan 猫变狗

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

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

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

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

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

基于飞桨实现BigGAN生成动漫图像——为艺术创作赋能

点击左上方蓝字关注我们 【飞桨开发者说】艾梦,深度学习业余选手,热衷于用AI创造新的可能性,努力探索发现未知的神奇世界。玩AI,我是认真的。 作为学力不足、码力有余的深度学习业余玩家,笔者在工作中忙里偷闲&#xf…

GAN变种介绍 - DCGAN、InfoGAN、CycleGAN、WGAN、Self-Attention GAN、BigGAN

GAN变种介绍 - DCGAN、InfoGAN、CycleGAN、WGAN、Self-Attention GAN、BigGAN 一、DCGAN二、InfoGAN三、CycleGAN四、WGAN五、Self-Attention GAN六、BigGAN 在原始的 GAN 论文中,Ian Goodfellow 从理论层面分析了 GAN 网络的收敛性,并且在多个经典图片数…

基于飞桨PaddlePaddle实现BigGAN生成动漫图像——为艺术创作赋能

作为学力不足、码力有余的深度学习业余玩家,笔者在工作中忙里偷闲,借助AI Studio的免费GPU继续自己对于生成对抗网络落地应用的相关研究。尽管深度学习已在工业生成中广泛应用,但作为研究重头的视觉效果极佳的GAN的图像生成,却在应…

深度学习(四十六)——StarGAN, InfoGAN, ProGAN, StyleGAN, BigGAN, FUNIT, CVAE

StarGAN 论文: 《StarGAN: Unified Generative Adversarial Networksfor Multi-Domain Image-to-Image Translation》 CycleGAN的局限在于:对于两个Domain之间的变换,需要两个G网络。可以想象,当Domain的数量上升时,…

biggan:large scale gan training for high fidelity natural image synthesis

深度解读DeepMind新作:史上最强GAN图像生成器—BigGAN - 知乎本期推荐的论文笔记来自 PaperWeekly 社区用户 TwistedW。由 DeepMind 带来的 BigGAN 可谓是笔者见过最好的 GAN 模型了,这里的 Big 不单单是指模型参数和 Batch 的大,似乎还在暗示…

飞桨PaddlePaddle(论文复现)-BigGAN解读

飞桨PaddlePaddle(论文复现)-BigGAN解读 先来看看效果(左上脚为生成的图像) 论文在现有GAN的基础上对生成样本的保真度与多样性之间的权衡进行改进 在ImageNet的128*128分辨率下训练,我们的模型(BigGANs)得到了166…

深度学习系列43:引入注意力的SAGAN/BigGAN和big_sleep

1. 从SAGAN到BigGAN sa_gan是Self-Attention Generative Adversarial Networks的缩写。 动机:一般的dc_gan(deep convolution)模型擅长处理含有大量纹理的类型,比如天空、风景等,但在结构上的表现比较差,比如不能正确生成人脸、四…