理论

模板匹配是在一个大图里搜索和找模板图像位置的方法。OpenCV有个函数cv2.matchTemplate()来做这个。它吧模板图像在输入图像上滑动,对比模板和在模板图像下的输入图像块。它返回了一个灰度图像,每个像素表示那个像素周围和模板匹配的情况。

如果输入图像大小是WxH而模板图像大小是wxh,输出图像的大小是(W-w+1, H-h+1)。当你得到了结果,你可以用cv2.minMaxLoc()函数来找最大最小值。把它作为矩形左上角,w,h作为矩形的宽和高。矩形是你的模板区域。

注意:

如果你用cv2.TM_SQDIFF作为比较方法,最小值是最匹配。

OpenCV里的模板匹配

作为例子,我们在照片里搜索messi的脸。所以我做了这个模板:

我们会尝试所有的比较方法import cv2

import numpy as np

from matplotlib import pyplot as plt

img = cv2.imread('messi5.jpg',0)

img2 = img.copy()

template = cv2.imread('template.jpg',0)

w, h = template.shape[::-1]

# All the 6 methods for comparison in a list

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:

img = img2.copy()

method = eval(meth)

# Apply template Matching

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

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

# If the method is TM_SQDIFF or TM_SQDIFF_NORMED, take minimum

if method in [cv2.TM_SQDIFF, cv2.TM_SQDIFF_NORMED]:

top_left = min_loc

else:

top_left = max_loc

bottom_right = (top_left[0] + w, top_left[1] + h)

cv2.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()

·cv2.TM_CCOEFF

·cv2.TM_CCOEFF_NORMED

·cv2.TM_CCORR

cv2.TM_CCORR_NORMED

cv2.TM_SQDIFF

cv2.TM_SQDIFF_NORMED

你可以看到cv2.TM_CCORR的结果不是我们想要的。

模板匹配多个目标

在前面我们搜索了messi的脸,目标只在图像里出现了一次,假设你要搜的东西在图像里出现多次,cv2.minMaxLoc()不会给你所有的位置。在这种情况下,我们会使用阈值,在这个例子里,我们使用超级玛丽的截图来找金币。import cv2

import numpy as np

from matplotlib import pyplot as plt

img_rgb = cv2.imread('mario.png')

img_gray = cv2.cvtColor(img_rgb, cv2.COLOR_BGR2GRAY)

template = cv2.imread('mario_coin.png',0)

w, h = template.shape[::-1]

res = cv2.matchTemplate(img_gray,template,cv2.TM_CCOEFF_NORMED)

threshold = 0.8

loc = np.where( res >= threshold)

for pt in zip(*loc[::-1]):

cv2.rectangle(img_rgb, pt, (pt[0] + w, pt[1] + h), (0,0,255), 2)

cv2.imwrite('res.png',img_rgb)

结果:

END

opencv python教程简书_OpenCV-Python教程:28.模板匹配相关推荐

  1. python教程简书_Python快速教程

    配到python源码实例学习更佳:http://www.eyesourcecode.com/f/Python/1 作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎 ...

  2. python 数据挖掘 简书_[Python数据挖掘入门与实践]-第一章开启数据挖掘之旅

    1.数据挖掘简介(略) 2.使用Python和IPython Notebook 2.1.安装Python 2.2.安装IPython 2.3.安装scikit-learn scikit-learn是用 ...

  3. opencv python教程简书_Python-OpenCV —— 基本操作一网打尽

    OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux.Windows.MacOS操作系统上.它轻量级而且高效--由一系列 C 函数和少量C++类构成,同时提供了Pyt ...

  4. python scatter 简书_写给 Pythonist 的 Spacemacs 入门指北

    前言 最开始,使用 Sublime Text 编码,后来用 Vim 混合 PyCharm 写 Python. 前几天,Github 上的 Spacemacs 已经成功的突破一万 Star, 听说几个我 ...

  5. 简书python_如何用python刷简书文章的浏览量

    作者:bigtrace 大家在简书上发表文章,最喜欢关心今天又多了多少访问量和赞.当然不只是简书,大部分的博客网站或者音乐社交如QQ空间,网易云音乐,都会去记录文章或者音乐的浏览或收听次数.可是你知道 ...

  6. python关键词 打标签详解_Python学习日记13|利用python制作简书首页热门文章关键词标签云...

    今天是6.16号. 昨天去面越秀金融风险控制部计算机实习生,去面了才知道主要也就是做数据抓取这一块.面试过程中有问到分词,然后自己心虚的说了有接触过分词这一块,面试结果就不去想了,过不过都其实不重要了 ...

  7. python snap7 简书_第14篇-Python中的Elasticsearch入门

    我的Elasticsearch系列文章,逐渐更新中,欢迎关注 另外Elasticsearch入门,我强烈推荐ElasticSearch搭建手册给你,非常想尽的入门指南手册. 在本文中,我将讨论Elas ...

  8. 用 python selenium 爬简书,Python自动化领域之 Selenium WebDriver 学习第2篇

    本篇博客使用 selenium 实现对简书官网的操作. 文章目录 通过 selenium 执行 JS selenium 实现简书搜索 selenium 隐式与显式等待 selenium 采集京东图书 ...

  9. 学python买什么书-关于 Python 的经典入门书籍有哪些?(python三大经典书)

    如何学python python数据分析的门低果python零基础开始学习的步骤大概是python基础.数据采集.数据处理.数据分析.数据可视化. 首先学习一点python基础的知识,Python语言 ...

最新文章

  1. Boston房价PaddlePaddle测试程序
  2. flexcan controller register
  3. 2048c语言程序,C语言实现2048小游戏
  4. VS2013(Visual Studio 2013)官方中文旗舰版安装激活方法
  5. ODPS技术架构及应用实践
  6. SQL调用C# dll(第一中DLL,没使用强名称密匙,默认是 safe)
  7. 正交矩阵和Gram-Schmidt正交化
  8. ERP软件的相关运营问题
  9. xp系统internet信息服务器地址,XP系统下Internet信息服务IIS的安装方法
  10. 2021-01-01
  11. displayport1.4
  12. 如何买到便宜点的书(知乎)
  13. 008_生成设备节点
  14. STM32CUBE——使用DWT提供毫秒延迟
  15. svg绘制蝌蚪状飞线
  16. python pip是什么的简写_Python包管理器pip
  17. AI时代下,如何打造一个具有情感化属性的智能相册?
  18. 测试参持之以恒兵勋章活动
  19. 成熟FOC电机控制代码 大厂成熟FOC电机控制图。 可用于电动自行车,滑板 车,电机FOC控制等
  20. 2010-2011-...-2016

热门文章

  1. hdoj 3376,2686 Matrix Again 【最小费用最大流】
  2. 关于浏览器Ajax请求Type为Request Payload而不是Form Data
  3. CXF WebService 教程
  4. Java接口和Java抽象类(转,原文已被删除)
  5. Gink掉过的坑(一):将CCTableView导入到lua中
  6. Mac otool替代readelf命令
  7. Android5.1蓝牙电话分析及demo
  8. Android Camera 运行流程
  9. ios实现图片动画效果
  10. 磁盘结构非常详细的介绍