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

article/2025/11/9 18:38:32

目录

  • 概念
  • 步骤
  • 单个对象匹配
    • 代码实现一
    • 代码实现二
  • 多个对象匹配
    • 代码实现

概念

模板匹配与剪辑原理很像,模板在原图像上从原点开始浮动,计算模板(图像被模板覆盖的地方)的差别程度,这个差别程度的计算方法在opencv里有六中,人后将每次计算的结果放入一个矩阵里面,作为输出结果。加入原图形是A*B大小,则输出结果的矩阵是(A-a+1)(B-b+1)
在这里插入图片描述
匹配完之后,告诉你每一个位置的结果,(结果会因为匹配算法不同而不同)
官网
在这里插入图片描述
在这里插入图片描述
建议用带归一化的,更可靠

步骤

单个目标的模板匹配

代码:

第一步:读入目标图片,读入模板图片,对目标图片和模板图片进行灰度化操作

第二步:使用cv2.matchtemplate(img, template, cv2.TM_CCOEFF_NORMED) 进行模板匹配,获得大量的ret结果
第三步:使用min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(ret) # 找出最大值数所在的位置

第四步:使用cv2.rectangle(original, max_loc, (max_loc[0] + w, max_loc[1] + h), (0, 0, 255), 2) 进行画图操作

第五步:我们对上述的方法进行循环,尝试各种方法所得到的结果

单个对象匹配

代码实现一

import cv2
import numpy as np
import matplotlib.pyplot as plt#读入图片,模板个原图
original = cv2.imread('girl.png')
img = cv2.imread('girl.png', 0)
template = cv2.imread('girlFace.png', 0)
template.shape
img.shape
methods = ['cv2.TM_CCOEFF_NORMED', 'cv2.TM_CCOEFF', 'cv2.TM_SQDIFF_NORMED', 'cv2.TM_SQDIFF', 'cv2.TM_CCORR', 'cv2.TM_CCORR_NORMED']
ret = cv2.matchTemplate(img, template, cv2.TM_CCOEFF_NORMED)
ret.shape

在这里插入图片描述
在这里插入图片描述
用max_loc = cv2.minMaxLoc(ret) 定位

在这里插入图片描述
在这里插入图片描述

for method in methods:draw_img = img.copy()#匹配方法的真值op = eval(method)ret = cv2.matchTemplate(img, template, op)min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(ret)#如果是平方差匹配cv2.TM_SQDIFF或归一化平方差匹配'cv2.TM_SQDIFF_NORMED,取最小值if method in ['cv2.TM_SQDIFF_NORMED', 'cv2.TM_SQDIFF']: #指定为实际的方法,不能是字符串loc = min_locelse:loc = max_locrect = cv2.rectangle(draw_img, loc, (loc[0] + w, loc[1] + h), (0, 0, 255), 2)#左上角这个点,弄出这个框框plt.subplot(121)plt.imshow(ret, cmap='gray')plt.title(method)plt.subplot(122)plt.imshow(rect, cmap='gray')plt.title(method)plt.show()

在这里插入图片描述
在这里插入图片描述

代码实现二

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

多个对象匹配

多目标匹配, 多目标匹配使用的是一个阈值,当大于这个阈值时,我们认为已经获得一个目标的匹配值

而使用cv2.matchTemplate匹配出的ret实际是一些上述指标的数值

代码实现

第一步:读入图片,对目标图片和模板进行灰度化
第二步:匹配模板,获得ret
第三步:使用np.where(ret>0.8) 删选合适的位置,这个位置是(0, 2)即0表示竖的,2表示横着的
第四步:使用index[::-1]将位置进行调换,使用*index[::-1]使得矩阵发生拆分,使用zip进行两两组合
第五步:使用cv2.rectangle进行画多个矩阵
第六步:使用cv2.imshow展示图片

original = cv2.imread('maliao.png')
img = cv2.imread('maliao.png', 0)
template = cv2.imread('maliaojinbi.png', 0)
h, w = template.shape[:2]
ret = cv2.matchTemplate(img, template, cv2.TM_CCORR_NORMED)#取匹配程度大于80%的坐标
index = np.where(ret > 0.8)draw_img = original.copy()
for i in zip(*index[::-1]):	#*代表可选参数rect = cv2.rectangle(draw_img, i, (i[0]+w, i[1]+h), (0, 0, 255), 1)cv2.imshow('rect', np.hstack((original, rect)))
cv2.waitKey(0)
cv2.destroyAllWindows()

在这里插入图片描述


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

相关文章

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

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 网络的收敛性,并且在多个经典图片数…