openCV——模板匹配

article/2025/11/9 18:45:07

单模板匹配

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 内寻找与图像 B 最相似的部分,一般将图像 A 称为输入图像,
将图像 B 称为模板图像。模板匹配的操作方法是将模板图像 B 在图像 A 上滑动,遍历所有像
素以完成匹配。

API

result = cv2.matchTemplate(image, templ, method[, mask ] )

  • image 为原始图像,必须是 8 位或者 32 位的浮点型图像。
  • templ 为模板图像。它的尺寸必须小于或等于原始图像,并且与原始图像具有同样的类型。
  • method 为匹配方法。有六种方法,如下图
  • mask 为模板图像掩模。它必须和模板图像 templ 具有相同的类型和大小。通常情况下该值使用默认值即可。当前,该参数仅支持 TM_SQDIFF 和 TM_CCORR_NORMED 两个值。
  • 返回值 result 是由每个位置的比较结果组合所构成的一个结果集,类型是单通道 32 位浮点型。如果输入图像(原始图像)尺寸是 WH,模板的尺寸是 wh,则返回值的大小为(W-w+1)*(H-h+1)。

在这里插入图片描述

下图是计算公式:
在这里插入图片描述

method 的值为 cv2.TM_SQDIFF 和 cv2.TM_SQDIFF_NORMED 时,result 值为 0 表示匹配度最好,值越大,表示匹配度越差;
method 的值为 cv2.TM_CCORR、cv2.TM_CCORR_NORMED、cv2.TM_CCOEFF和cv2.TM_CCOEFF_NORMED 时,result 的值越小表示匹配度越差,值越大表示匹配度越好

在查找最佳匹配时,首先要确定使用的是何种 method,然后再确定到底是查找最大值,还是查找最小值。查找最值(极值)与最值所在的位置,可以使用 cv2.minMaxLoc()函数实现。

minVal, maxVal, minLoc, maxLoc = cv2.minMaxLoc( src [, mask] )

  • src 为单通道数组。
  • minVal 为返回的最小值,如果没有最小值,则可以是 NULL(空值)。
  • maxVal 为返回的最大值,如果没有最小值,则可以是 NULL。
  • minLoc 为最大值的位置,如果没有最大值,则可以是 NULL。
  • maxLoc 为最大值的位置,如果没有最大值,则可以是 NULL。
  • mask 为用来选取掩模的子集,可选项。
lena = cv2.imread("lena.jpg")
template = cv2.imread("template.png")
# 模板匹配
res = cv2.matchTemplate(lena, template, cv2.TM_CCOEFF_NORMED)
# 相关系数则是值越大越匹配
minVal, maxVal, minLoc, maxloc = cv2.minMaxLoc(res)
img = cv2.rectangle(lena, (maxloc[0], maxloc[1]), (maxloc[0]+template.shape[1], maxloc[1]+template.shape[0]), (255, 0, 0), 2)
cvshow("lena", img)

Img = cv.rectangle( img, pt1, pt2, color[, thickness])

  • img 表示要标记的目标图像
  • pt1 是矩形的顶点
  • pt2 是 pt1 的对角顶点
  • color 是要绘制矩形的颜色或灰度级(灰度图像)
  • thickness 是矩形边线的宽度

多模板匹配

有些情况下,要搜索的模板图像很可能在输入图像内出现了多次,这时就需要想匹配多个结果,使用函数 cv2.minMaxLoc()是无法实现的,需要利用np.where()进行处理。要找出多个匹配结果。

a = np.arange(12).reshape(3, 4)
b = np.where(a>2)
print(a)
print(b)
[[ 0  1  2  3][ 4  5  6  7][ 8  9 10 11]]
(array([0, 1, 1, 1, 1, 2, 2, 2, 2], dtype=int64), array([3, 0, 1, 2, 3, 0, 1, 2, 3], dtype=int64))

可以看出,np.where()返回值为一个元组,每个元素为一个array,array中的元素代表索引。因为a为二维矩阵,所以返回两个数组,一个代表行索引,一个代表列索引,行列索引一一匹配成一个坐标

函数 zip()用可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表

# 将原始图像扩充为4份进行多模板匹配
lena = cv2.imread("lena.jpg")
mid = np.hstack((lena, lena))
res = np.vstack((mid, mid))
cvshow("res", res)
# 读入模板
template = cv2.imread("template.png")
# 模板匹配
result = cv2.matchTemplate(res, template, cv2.TM_CCOEFF_NORMED)width, height = template.shape[1], template.shape[0]# 阈值筛选
filter = np.where(result>0.95)
# 打包行列索引对并遍历
for item in zip(*filter[::-1]):  #filter[::-1]表示行列数组互换位置,原来是第一个数组为行索引,第二个数组为列索引,但是列索引才表示x,行索引表示yprint(item)cv2.rectangle(res, (item[0], item[1]), (item[0]+width, item[1]+height), (0, 255, 0), 1)
cvshow("res", res)
(127, 111)
(390, 111)
(127, 374)
(390, 374)

其实按这个道理来说,应该会有很多区域可以匹配成功,但是每个图象里怎么就一个框呢?其实是都画出来了,尤其是最相似的区域里有很多框,只不过都重合在一起了,框的线条粗细才1,可以把阈值调低看框是不是会变很粗



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

相关文章

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

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

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