OpenCV-Python模板匹配人眼的实例


Posted in Python onJune 08, 2021

什么是模板匹配

模板匹配是指在当前图像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()

运行之后,效果如下:

OpenCV-Python模板匹配人眼的实例

附录:

模板图

OpenCV-Python模板匹配人眼的实例

原图

OpenCV-Python模板匹配人眼的实例

到此这篇关于OpenCV-Python模板匹配人眼的实例的文章就介绍到这了,更多相关OpenCV 模板匹配 内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
用Python中的__slots__缓存资源以节省内存开销的方法
Apr 02 Python
Python中使用bidict模块双向字典结构的奇技淫巧
Jul 12 Python
Python中使用asyncio 封装文件读写
Sep 11 Python
python 寻找优化使成本函数最小的最优解的方法
Dec 28 Python
python 监听salt job状态,并任务数据推送到redis中的方法
Jan 14 Python
Python socket非阻塞模块应用示例
Sep 12 Python
Python读取VOC中的xml目标框实例
Mar 10 Python
浅谈Python线程的同步互斥与死锁
Mar 22 Python
解决python父线程关闭后子线程不关闭问题
Apr 25 Python
Python Dict找出value大于某值或key大于某值的所有项方式
Jun 05 Python
matplotlib.pyplot.matshow 矩阵可视化实例
Jun 16 Python
python转化excel数字日期为标准日期操作
Jul 14 Python
健身房被搭讪?用python写了个小米计时器助人为乐
解决pycharm安装scrapy DLL load failed:找不到指定的程序的问题
OpenCV-Python实现轮廓拟合
python图像处理基本操作总结(PIL库、Matplotlib及Numpy)
Django drf请求模块源码解析
Python中OpenCV实现查找轮廓的实例
python字符串的多行输出的实例详解
Jun 08 #Python
You might like
php 按指定元素值去除数组元素的实现方法
2011/11/04 PHP
PHP获取文件后缀名的三个函数
2012/10/15 PHP
php cli换行示例
2014/04/22 PHP
php metaphone()函数及php localeconv() 函数实例解析
2016/05/15 PHP
PHP中的表达式简述
2016/05/29 PHP
php实现PDO中捕获SQL语句错误的方法
2017/02/16 PHP
SUN的《AJAX与J2EE》全文译了
2007/02/23 Javascript
Convert Seconds To Hours
2007/06/16 Javascript
javascript 框架小结 个人工作经验
2009/06/13 Javascript
jquer之ajaxQueue简单实现代码
2011/09/15 Javascript
解析John Resig Simple JavaScript Inheritance代码
2012/12/03 Javascript
javascript自定义startWith()和endWith()的两种方法
2013/11/11 Javascript
jQuery中index()方法用法实例
2014/12/27 Javascript
在浏览器中打开或关闭JavaScript的方法
2015/06/03 Javascript
jquery实现可自动收缩的TAB网页选项卡代码
2015/09/06 Javascript
js上下视差滚动简单实现代码
2017/03/07 Javascript
AngularJS 验证码60秒倒计时功能的实现
2017/06/05 Javascript
用Node编写RESTful API接口的示例代码
2018/07/04 Javascript
JS使用数组实现的队列功能示例
2019/03/04 Javascript
JS实现简单贪吃蛇小游戏
2020/10/28 Javascript
详解使用 pyenv 管理多个版本 python 环境
2017/10/19 Python
Python判断一个三位数是否为水仙花数的示例
2018/11/13 Python
关于Pycharm无法debug问题的总结
2019/01/19 Python
python实现祝福弹窗效果
2019/04/07 Python
ubuntu 18.04搭建python环境(pycharm+anaconda)
2019/06/14 Python
Python 的字典(Dict)是如何存储的
2019/07/05 Python
Python中生成一个指定长度的随机字符串实现示例
2019/11/06 Python
解决pyqt5异常退出无提示信息的问题
2020/04/08 Python
Python2.x与3​​.x版本有哪些区别
2020/07/09 Python
浅谈python处理json和redis hash的坑
2020/07/16 Python
浅谈基于Canvas的手绘风格图形库Rough.js
2018/03/19 HTML / CSS
定制别致的瑜伽垫:Sugarmat
2019/06/21 全球购物
解决python 输出到csv 出现多空行的情况
2021/03/24 Python
2015小学师德工作总结
2015/07/21 职场文书
2016年小学生寒假总结
2015/10/10 职场文书
GO语言字符串处理函数之处理Strings包
2022/04/14 Golang