OpenCV-Python模板匹配人眼的实例
作者:一天一篇Python库 发布时间:2022-10-22 06:09:23
标签:OpenCV,模板匹配
什么是模板匹配
模板匹配是指在当前图像A内寻找与图像B最相似的部分,可以理解找茬,但是这里是找出一样的信息。
一般我们将图像A称为输入图像,将图像B称为模板图像。模板匹配的原理就是将模板B图像在图像A上滑动遍历,找出与其匹配的部分。
模板匹配函数
在OpenCV中,它给我们提供了cv2.matchTemplate()函数来完成模板匹配。其函数的完整定义如下:
def matchTemplate(image, templ, method, result=None, mask=None):
image:原始图像
templ:模板图像
method:匹配方法。该参数通过TemplateMatchModes实现,如下表所示:
参数 | 取值 | 含义 |
---|---|---|
cv2.TM_SQDIFF | 0 | 以方差为依据进行匹配。若完全匹配,则结果为0;若不匹配,则会得到一个很大的差值 |
cv2.TM_SQDIFF_NORMED | 1 | 标准(归一化)平方差匹配 |
cv2.TM_CCORR | 2 | 相关匹配,这类方法将模板图像与输入图像相乘,如果乘积越大,则匹配度较高;如果乘积为0,则表示匹配效果最差 |
cv2.TM_CCORR_NORMED | 3 | 标准(归一化)相关匹配 |
cv2.TM_CCOEFF | 4 | 相关系统匹配,这类方法将模板图像与其均值的相对值,和输入图像与其均值的相关值进行匹配。1表示完美匹配,-1表示糟糕的匹配,0表示没有任何相关匹配(随机序列) |
cv2.TM_CCOEFF_NORMED | 5 | 标准(归一化)相关系数匹配 |
result:返回值。它是由每个位置的比较结果组合所构成的一个结果集,类型是单通道32位浮点型。如果输入图像尺寸是WH,模板尺寸是wh,则返回值的大小为(W-w+1)*(H-h+1)。
mask:模板图像掩模。它必须与模板图像具有相同类型的大小。通常使用默认值即可。
实现模板匹配
首先,我们需要两张图片,这里我们还是选取经常用的美女照片以及截取其眼睛部分作为模板图像,如下:
import cv2
import matplotlib.pyplot as plt
img = cv2.imread("4.jpg", 0)
template = cv2.imread("4_1.jpg", 0)
th, tw = template.shape[::]
rv = cv2.matchTemplate(img, template, cv2.TM_SQDIFF)
min, max, minLoc, maxLoc = cv2.minMaxLoc(rv)
topLeft = minLoc
bottomRight = (topLeft[0] + tw, topLeft[1] + th)
cv2.rectangle(img, topLeft, bottomRight, 255, 2)
plt.subplot(121)
plt.imshow(template, cmap="gray")
plt.axis('off')
plt.subplot(122)
plt.imshow(img, cmap="gray")
plt.axis('off')
plt.show()
运行之后,效果如下:
附录:
模板图
原图
来源:https://liyuanjinglyj.blog.csdn.net/article/details/114017568


猜你喜欢
- 一。存储过程的创建和使用 1.创建程序包,并在程序中创建存储过程 create or replace PACKAGE NCS_ICP_TJ
- 这里提供在使用python进行开发中常使用到的方法技巧,如有不对欢迎批评指正。要点:开发中类、变量特性查询,类型就是类,断言的使用,深浅复制
- 本文详细讲述了Python2.7环境Flask框架安装方法。分享给大家供大家参考,具体如下:第1步:确保本机已经安装有python,下载ea
- 一、激活函数1.Sigmoid函数函数图像以及表达式如下:通过该函数,可以将输入的负无穷到正无穷的输入压缩到0-1之间。在x=0的时候,输出
- JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于JavaScript(Standard
- Qt Designer的介绍在PyQt中编写UI界面可以直接通过代码来实现,也可以通过Qt Designer来完成。Qt Designer的
- 首先安装需要的模块pip install aliyun-python-sdk-corepip install aliyun-python-s
- 前言最近在工作中碰到一个小的排序问题,需要按嵌套对象的多个属性来排序,于是发现了Python里的operator模块和sorted函数组合可
- Node.js中的事件触发器所引发的思考今天在看 Node.js 文档的时候讲到事件触发器,其中的 emit 方法让我想到了 Vue 中的自
- 大家都知道Js有同源策略,就是主域名不同嵌套的iframe不允许Js通信的。比如我有一个网站,网站中要嵌入其网站的页面。那么我可
- 有表如下:如何获得如下结果:解法使用xml转换代码如下: CREATE TABLE body (
- 如何在ADO中客户端利用好缓存技术?具体应用见下例:global.asa< !--METADATA TYPE=&q
- substr 定义和用法 substr() 方法可在字符串中抽取从 start 下标开始的指定数目的字符。 语法 stringObject.
- 对于mysql驱动问题折腾了一下午,现共享出解决方案1:手动安装驱动完全是场噩梦,推荐大家采用自动安装2:自动安装下载自动安装包,下载地址:
- 编写程序的时候,经常要处理字符串,最基本就是字符串的查找,在php检测字符串中是否包含指定字符串可以使用正则,如果你对正则不了解,那么有几个
- python中的二叉树模块内容:BinaryTree:非平衡二叉树 AVLTree:平衡的AVL树 RBTree:平衡的
- 数据库状态 (database states)查询数据库的当前状态 :1、查询所有数据库的状态 ,通过sys.databases目录视图的s
- 1、chr(i)chr()函数返回ASCII码对应的字符串。>>> print chr(65)A>>>
- 在进行数据库的查询时,会经常遇到这样的情况:例如想在一个用户数据库中查询他的用户名和他的密码,但恰好该用户使用的名字和密码中有特殊的字符,例
- 最近无意中接触到了一篇文章,里面写了一个SQL的用法,是with...as,中午抽空记录一下用MySQL试了一下,发现并不支持该语法(版本: