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

作者:一天一篇Python库 时间:2022-10-22 06:09:23 

什么是模板匹配

模板匹配是指在当前图像A内寻找与图像B最相似的部分,可以理解找茬,但是这里是找出一样的信息。

一般我们将图像A称为输入图像,将图像B称为模板图像。模板匹配的原理就是将模板B图像在图像A上滑动遍历,找出与其匹配的部分。

模板匹配函数

在OpenCV中,它给我们提供了cv2.matchTemplate()函数来完成模板匹配。其函数的完整定义如下:


def matchTemplate(image, templ, method, result=None, mask=None):

image:原始图像

templ:模板图像

method:匹配方法。该参数通过TemplateMatchModes实现,如下表所示:

参数取值含义
cv2.TM_SQDIFF0以方差为依据进行匹配。若完全匹配,则结果为0;若不匹配,则会得到一个很大的差值
cv2.TM_SQDIFF_NORMED1标准(归一化)平方差匹配
cv2.TM_CCORR2相关匹配,这类方法将模板图像与输入图像相乘,如果乘积越大,则匹配度较高;如果乘积为0,则表示匹配效果最差
cv2.TM_CCORR_NORMED3标准(归一化)相关匹配
cv2.TM_CCOEFF4相关系统匹配,这类方法将模板图像与其均值的相对值,和输入图像与其均值的相关值进行匹配。1表示完美匹配,-1表示糟糕的匹配,0表示没有任何相关匹配(随机序列)
cv2.TM_CCOEFF_NORMED5标准(归一化)相关系数匹配

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模板匹配人眼的实例

来源:https://liyuanjinglyj.blog.csdn.net/article/details/114017568

标签:OpenCV,模板匹配
0
投稿

猜你喜欢

  • MySQL性能优化技巧分享

    2024-01-26 06:58:16
  • 新手如何安装Mysql(亲测有效)

    2024-01-17 00:21:01
  • 浅谈Pandas Series 和 Numpy array中的相同点

    2022-06-11 15:20:17
  • python编程的核心知识点总结

    2023-09-26 21:24:24
  • pytorch实践线性模型3d详解

    2023-04-01 22:58:29
  • 玩转Python发短信的实现

    2021-09-17 20:38:54
  • python3用urllib抓取贴吧邮箱和QQ实例

    2022-05-15 16:25:18
  • Sqlserver timestamp数据类使用介绍

    2024-01-13 22:31:11
  • 使用游标进行PHP SQLSRV查询的方法与注意事项

    2023-05-22 10:51:10
  • python读取大文件越来越慢的原因与解决

    2022-07-23 08:35:28
  • Python3多进程 multiprocessing 模块实例详解

    2022-05-27 11:11:51
  • logrus日志自定义格式操作

    2024-04-26 17:20:24
  • 利用python实现汉字转拼音的2种方法

    2023-12-08 09:58:50
  • JS target与currentTarget区别说明

    2023-08-22 20:14:40
  • asp读取xml实例代码

    2011-03-08 11:13:00
  • Javascript脚本实现静态网页加密实例代码

    2024-04-19 11:04:30
  • python 实现logging动态变更输出日志文件名

    2023-10-26 06:40:27
  • Python3 加密(hashlib和hmac)模块的实现

    2022-07-02 08:13:52
  • Python Flask入门

    2023-11-03 17:00:49
  • 关于vue3默认把所有onSomething当作v-on事件绑定的思考

    2024-05-22 10:41:34
  • asp之家 网络编程 m.aspxhome.com