目标

在本章中,您将学习

  • 使用模板匹配在图像中查找对象

  • 你将看到以下功能:cv.matchTemplate(),cv.minMaxLoc()

理论

模板匹配是一种用于在较大图像中搜索和查找模板图像位置的方法。为此,OpenCV带有一个函数cv.matchTemplate()。
它只是将模板图像滑动到输入图像上(就像在2D卷积中一样),然后在模板图像下比较模板和输入图像的拼图。
OpenCV中实现了几种比较方法。(您可以检查文档以了解更多详细信息)。它返回一个灰度图像,其中每个像素表示该像素的邻域与模板匹配的程度。

如果输入图像的大小为(WxH),而模板图像的大小为(wxh),则输出图像的大小将为(W-w + 1,H-h + 1)。得到结果后,可以使用cv.minMaxLoc()函数查找最大/最小值在哪。将其作为矩形的左上角,并以(w,h)作为矩形的宽度和高度。该矩形是您模板的区域。

注意
如果使用cv.TM_SQDIFF作为比较方法,则最小值提供最佳匹配。

OpenCV中的模板匹配

作为示例,我们将在梅西的照片中搜索他的脸。所以我创建了一个模板,如下所示:

我们将尝试所有比较方法,以便我们可以看到它们的结果如何:

import cv2 as cv
import numpy as np
from matplotlib import pyplot as plt
img = cv.imread('messi5.jpg',0)
img2 = img.copy()
template = cv.imread('template.jpg',0)
w, h = template.shape[::-1]
# 列表中所有的6种比较方法
methods = ['cv.TM_CCOEFF', 'cv.TM_CCOEFF_NORMED', 'cv.TM_CCORR','cv.TM_CCORR_NORMED', 'cv.TM_SQDIFF', 'cv.TM_SQDIFF_NORMED']
for meth in methods:img = img2.copy()method = eval(meth)# 应用模板匹配res = cv.matchTemplate(img,template,method)min_val, max_val, min_loc, max_loc = cv.minMaxLoc(res)# 如果方法是TM_SQDIFF或TM_SQDIFF_NORMED,则取最小值if method in [cv.TM_SQDIFF, cv.TM_SQDIFF_NORMED]:top_left = min_locelse:top_left = max_locbottom_right = (top_left[0] + w, top_left[1] + h)cv.rectangle(img,top_left, bottom_right, 255, 2)plt.subplot(121),plt.imshow(res,cmap = 'gray')plt.title('Matching Result'), plt.xticks([]), plt.yticks([])plt.subplot(122),plt.imshow(img,cmap = 'gray')plt.title('Detected Point'), plt.xticks([]), plt.yticks([])plt.suptitle(meth)plt.show()

查看以下结果:

  • cv.TM_CCOEFF

  • cv.TM_CCOEFF_NORMED

  • cv.TM_CCORR

  • cv.TM_CCORR_NORMED

  • cv.TM_SQDIFF

  • cv.TM_SQDIFF_NORMED

您会看到,使用cv.TM_CCORR的结果并不理想。

多对象的模板匹配

在上一节中,我们在图像中搜索了梅西的脸,该脸在图像中仅出现一次。假设您正在搜索具有多次出现的对象,则cv.minMaxLoc()不会为您提供所有位置。在这种情况下,我们将使用阈值化。因此,在此示例中,我们将使用著名游戏Mario的屏幕截图,并在其中找到硬币。

import cv2 as cv
import numpy as np
from matplotlib import pyplot as plt
img_rgb = cv.imread('mario.png')
img_gray = cv.cvtColor(img_rgb, cv.COLOR_BGR2GRAY)
template = cv.imread('mario_coin.png',0)
w, h = template.shape[::-1]
res = cv.matchTemplate(img_gray,template,cv.TM_CCOEFF_NORMED)
threshold = 0.8
loc = np.where( res >= threshold)
for pt in zip(*loc[::-1]):cv.rectangle(img_rgb, pt, (pt[0] + w, pt[1] + h), (0,0,255), 2)
cv.imwrite('res.png',img_rgb)

结果:

☆☆☆为方便大家查阅,小编已将OpenCV-Python专栏文章统一整理到公众号底部菜单栏,同步更新中,关注公众号,点击左下方“文章”,如图:

或点击下方“阅读原文”,进入OpenCV-Python专栏,即可查看系列文章。

不断更新资源

获取更多精彩

长按二维码扫码关注

OpenCV系列之模板匹配 | 三十一相关推荐

  1. 基于opencv的图片模板匹配及其简单应用

    opencv的图片模板匹配及其简单应用 我的个人博客 基础知识 基于opencv的图片模板匹配 注: python及其相关包的安装不在讨论范围内 opencv提供了图片模板匹配的方法, cv2.mat ...

  2. OpenCV中使用模板匹配识别空闲的货架空间

    但是点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 假设你是一名在超市工作的员工,被要求在商店里四处走动,检查需要 ...

  3. OpenCV中的模板匹配

    OpenCV中的模板匹配 在该demo中选取了两张猴哥的照片,一张用来获得模板,另外一张用模板去匹配. 下图为选取模板的图像: 以下为选取的匹配模板: 根据该模板在下面的图中找到猴哥的脸: 该demo ...

  4. OpenCV学习之模板匹配

    模板匹配的概念与原理就不说了,<OpenCV3编程入门>这本书第9.5节有介绍,不过比较简洁,至于看不看得懂就NBCS了嘻嘻,毕竟本人也是看得一知半解.那么本次呢,主要就是针对该书中的9. ...

  5. opencv自适应尺寸模板匹配

    opencv自带的模板匹配常规做法: 1.转换灰度图 cvtColor(img_template, img_template, CV_RGB2GRAY);cvtColor(org, org, CV_R ...

  6. opencv下通过模板匹配进行人体跟踪

    本人学习opencv了半个月,学到模板匹配函数时灵感一动,写出了这个模板匹配的函数.特此,将我的灵感奉献给大家.废话不多说,代码贴上. #include "stdafx.h" #i ...

  7. OpenCV+python:模板匹配

    1,模板匹配的概念及原理 模板匹配是一项在一幅图像中寻找与另一幅模板图像最匹配(相似)部分的技术. 我们需要2幅图像: 模板 (T): 将和原图像比照的图像块 原图像 (I): 在这幅图像里,我们希望 ...

  8. opencv java match_OpenCV模板匹配函数matchTemplate详解

    参考文档:http://www.opencv.org.cn/opencvdoc/2.3.2/html/doc/tutorials/imgproc/histograms/template_matchin ...

  9. OpenCV中的模板匹配/Filter2d

    1.模板匹配 模板匹配是在图像中寻找目标的方法之一.Come On, Boy.我们一起来看看模板匹配到底是怎么回事. 参考链接:http://www.opencv.org.cn/opencvdoc/2 ...

最新文章

  1. Clip Studio Paint 高级着色学习教程
  2. 面试题:css之品字布局?
  3. 直播卡顿原因详解及优化
  4. csu1377Putter HOJ12816
  5. vb.net連接ACCESS数据库
  6. 完整的一次 HTTP 请求响应过程(二)
  7. 02_Nginx基本配置与参数说明 + 辅助命令
  8. 860. 柠檬水找零 golang
  9. Spring Security 用户登录实战
  10. 如何在史上最糟糕的里约奥运会中活下去?(内附奥运赛事时间表)
  11. JAVA 反射(JAVA面试题)
  12. 产品生命周期管理PLM系统概述——睿思成研发管理咨询(www.wiserdm.com)
  13. CPU指令集存储位置在哪里?
  14. RQ dashboard使用
  15. HTML系列之水平线标签hr
  16. java 简单文件加密
  17. 50欧姆线设计 高频pcb_高频PCB设计:射频电路的布局的走线
  18. PHP基于微信小程序的医院预约挂号系统 uniapp 小程序
  19. 国产免费倾斜摄影模型在线发布平台,一键查看、编辑、分享场景!
  20. k-means聚类、以及二维、三维可视化

热门文章

  1. 树莓派 python 蜂鸣器_树莓派3b强行驱动无源蜂鸣器
  2. Keep客户端 In-App Purchase 掉单踩坑指南
  3. Python自定义高精度小数计算来获取巴塞尔问题的近似值
  4. 【技巧】用iFunBox将照片传到相机胶卷中
  5. Linux C TCP Socket实现客户与服务器简单通信
  6. iOS开源项目周报0406
  7. python连接mt4服务器_如何从MetaTrader 4/5终端向外部服务器发送数据?
  8. KNN(K-最近邻分类)分类算法
  9. window10+vs2022配置window驱动开发环境
  10. 制造企业如何开展客户满意度调查?上书房信息咨询为你解答