opencv python教程简书_OpenCV-Python教程:28.模板匹配
理论
模板匹配是在一个大图里搜索和找模板图像位置的方法。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.模板匹配相关推荐
- python教程简书_Python快速教程
配到python源码实例学习更佳:http://www.eyesourcecode.com/f/Python/1 作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎 ...
- python 数据挖掘 简书_[Python数据挖掘入门与实践]-第一章开启数据挖掘之旅
1.数据挖掘简介(略) 2.使用Python和IPython Notebook 2.1.安装Python 2.2.安装IPython 2.3.安装scikit-learn scikit-learn是用 ...
- opencv python教程简书_Python-OpenCV —— 基本操作一网打尽
OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux.Windows.MacOS操作系统上.它轻量级而且高效--由一系列 C 函数和少量C++类构成,同时提供了Pyt ...
- python scatter 简书_写给 Pythonist 的 Spacemacs 入门指北
前言 最开始,使用 Sublime Text 编码,后来用 Vim 混合 PyCharm 写 Python. 前几天,Github 上的 Spacemacs 已经成功的突破一万 Star, 听说几个我 ...
- 简书python_如何用python刷简书文章的浏览量
作者:bigtrace 大家在简书上发表文章,最喜欢关心今天又多了多少访问量和赞.当然不只是简书,大部分的博客网站或者音乐社交如QQ空间,网易云音乐,都会去记录文章或者音乐的浏览或收听次数.可是你知道 ...
- python关键词 打标签详解_Python学习日记13|利用python制作简书首页热门文章关键词标签云...
今天是6.16号. 昨天去面越秀金融风险控制部计算机实习生,去面了才知道主要也就是做数据抓取这一块.面试过程中有问到分词,然后自己心虚的说了有接触过分词这一块,面试结果就不去想了,过不过都其实不重要了 ...
- python snap7 简书_第14篇-Python中的Elasticsearch入门
我的Elasticsearch系列文章,逐渐更新中,欢迎关注 另外Elasticsearch入门,我强烈推荐ElasticSearch搭建手册给你,非常想尽的入门指南手册. 在本文中,我将讨论Elas ...
- 用 python selenium 爬简书,Python自动化领域之 Selenium WebDriver 学习第2篇
本篇博客使用 selenium 实现对简书官网的操作. 文章目录 通过 selenium 执行 JS selenium 实现简书搜索 selenium 隐式与显式等待 selenium 采集京东图书 ...
- 学python买什么书-关于 Python 的经典入门书籍有哪些?(python三大经典书)
如何学python python数据分析的门低果python零基础开始学习的步骤大概是python基础.数据采集.数据处理.数据分析.数据可视化. 首先学习一点python基础的知识,Python语言 ...
最新文章
- Boston房价PaddlePaddle测试程序
- flexcan controller register
- 2048c语言程序,C语言实现2048小游戏
- VS2013(Visual Studio 2013)官方中文旗舰版安装激活方法
- ODPS技术架构及应用实践
- SQL调用C# dll(第一中DLL,没使用强名称密匙,默认是 safe)
- 正交矩阵和Gram-Schmidt正交化
- ERP软件的相关运营问题
- xp系统internet信息服务器地址,XP系统下Internet信息服务IIS的安装方法
- 2021-01-01
- displayport1.4
- 如何买到便宜点的书(知乎)
- 008_生成设备节点
- STM32CUBE——使用DWT提供毫秒延迟
- svg绘制蝌蚪状飞线
- python pip是什么的简写_Python包管理器pip
- AI时代下,如何打造一个具有情感化属性的智能相册?
- 测试参持之以恒兵勋章活动
- 成熟FOC电机控制代码 大厂成熟FOC电机控制图。 可用于电动自行车,滑板 车,电机FOC控制等
- 2010-2011-...-2016