模板匹配

OpenCV框架提供了用于对象检测、跟踪和计数的许多不同方法。其中,模板匹配是OpenCV中最基本的对象检测方法之一。

OpenCV API:

res = cv.matchTemplate(image, templ, method)

参数:

  1. image:要进行模板匹配的图像
  2. templ:模板(图像)
  3. method:是模板匹配的算法。主要有:
    1. 平方差匹配(cv.TM_SQDIFF):利用模板与图像之间的平方差进行匹配,最好的匹配是0,匹配越差,匹配的值越大。
    2. 相关匹配(cv.TM_CCORR):利用模板与图像间的乘法进行匹配,数值越大表示匹配程度较高,越小表示匹配效果差。
    3. 利用相关系数匹配(cv.TM_CCOEFF):利用模板与图像间的相关系数匹配,1表示完美的匹配,-1表示最差的匹配。
    4. cv.TM_SQDIFF_NORMED
    5. cv.TM_CCORR_NORMED
    6. cv.TM_CCOEFF_NORMED

原理:

  1. 模板匹配即用大小为 W*H 的模板在大小为 Q*S 的图像上滑动,并使用参数method中指定的方法,将模板与图像的所有重叠部分进行比较,然后将比较结果存储在结果 res 中。
    显然,图像 (Q*S) 必须大于模板 (W*H) ,且最终的结果 res 的大小为(Q-W+1)*(S-H+1)。
  2. 如果匹配方法中含有_NORMED,那么模板匹配函数之后就不再需要进行归一化处理,因为结果将在0和1的范围内,否则,需要使用 normalize 函数对结果进行归一化处理。
  3. 完成匹配后,使用cv.minMaxLoc()方法定位结果图像的全局最小值(图像中的最暗点)和全局最大值(图像中的最亮点)。如果使用的是平方差匹配,则最小值位置是最佳匹配位置,否则,则最大值位置是最佳匹配位置。

注意:

        模板匹配不适用于尺度变换,视角变换后的图像,这时我们就要使用关键点匹配算法,比较经典的关键点检测算法包括SIFT和SURF等,主要的思路是首先通过关键点检测算法获取模板和测试图片中的关键点﹔然后使用关键点匹配算法处理即可,这些关键点可以很好的处理尺度变化、视角变换、旋转变化、光照变化等,具有很好的不变性。

代码编写

import cv2 as cv
import matplotlib.pyplot as plt
import numpy as npsrc = cv.imread("E:\\qi.png")
img = src.copy()
src_roi = cv.imread("E:\\roi.png")
roi = src_roi.copy()# 模板匹配
res = cv.matchTemplate(img, roi, cv.TM_CCOEFF_NORMED)# 返回模板中最匹配的位置,确定左上角的坐标
min_Val, max_Val, min_Loc, max_Loc = cv.minMaxLoc(res)
# 使用相关系数匹配时,最大值为最佳匹配位置
top_left = max_Loc
roi_rows, roi_cols = roi.shape[:2]
cv.rectangle(img, top_left, (top_left[0]+roi_cols, top_left[1]+roi_rows), (0, 0, 255), 3)# 显示图像
fig, axes = plt.subplots(nrows=2, ncols=2, figsize=(10, 8), dpi=100)
axes[0][0].imshow(src[:, :, ::-1])
axes[0][0].set_title("原图")
axes[0][1].imshow(roi[:, :, ::-1])
axes[0][1].set_title("模板")
axes[1][0].imshow(res, cmap=plt.cm.gray)
axes[1][0].set_title("比较结果")
axes[1][1].imshow(img[:, :, ::-1])
axes[1][1].set_title("最终匹配图")
plt.show()

拓展

matchTemplate函数的另一个功能就是模板计数,为了完成该功能,需要在循环内运行matchTemplate函数,并在每次匹配成功后从原图像中移除已匹配的部分,以便在matchTemplate下一次调用时不再匹配已匹配的部分。

模板计数广泛用于生产线或平整表面中对目标进行计数,或者在微观图像中计算相似形状和大小的细胞的数量。

python+OpenCv笔记(十七):模板匹配相关推荐

  1. OpenCV笔记:模板匹配 cv2.matchTemplate()、cv2.minMaxLoc() 与 绘制矩形 cv2.rectangle() 方法介绍

    导读 模板匹配是用来在一副大图中搜寻查找模版图像位置的方法.绘制矩形是用来将模版图像的匹配结果展示出来的方法. 模板匹配实现简单(2~3行代码),计算效率高,不需要执行阈值化.边缘检测等操作来生成二值 ...

  2. Python+Opencv实现图像匹配——模板匹配

    1.原理 简单来说,模板匹配就是拿一个模板(图片)在目标图片上依次滑动,每次计算模板与模板下方的子图的相似度,最后就计算出了非常多的相似度: 如果只是单个目标的匹配,那只需要取相似度最大值所在的位置就 ...

  3. python opencv屏幕找图_使用Python+OpenCV进行图像模板匹配(Match Template)实例-找到百度首页按钮并点击...

    意图:准备一张小图,在电脑屏幕上找到小图坐标,并点击. 1  安装 opencv 和 numpy: pip3 install opencv-python 上述命令将 opencv 和 numpy都安装 ...

  4. OpenCV 学习笔记(模板匹配)

    OpenCV 学习笔记(模板匹配) 模板匹配是在一幅图像中寻找一个特定目标的方法之一.这种方法的原理非常简单,遍历图像中的每一个可能的位置,比较各处与模板是否"相似",当相似度足够 ...

  5. OpenCV中使用模板匹配识别空闲的货架空间

    但是点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 假设你是一名在超市工作的员工,被要求在商店里四处走动,检查需要 ...

  6. 基于opencv的图片模板匹配及其简单应用

    opencv的图片模板匹配及其简单应用 我的个人博客 基础知识 基于opencv的图片模板匹配 注: python及其相关包的安装不在讨论范围内 opencv提供了图片模板匹配的方法, cv2.mat ...

  7. Python-OpenCV 笔记9 -- 模板匹配

    Python-OpenCV 笔记9 – 模板匹配 1.模板匹配:matchTemplate() 函数原型: matchTemplate(image, templ, method[, result[, ...

  8. OpenCV中的模板匹配

    OpenCV中的模板匹配 在该demo中选取了两张猴哥的照片,一张用来获得模板,另外一张用模板去匹配. 下图为选取模板的图像: 以下为选取的匹配模板: 根据该模板在下面的图中找到猴哥的脸: 该demo ...

  9. python+OpenCV笔记(二十四):Shi-Tomasi角点检测

    Shi-Tomasi角点检测 原理 python+OpenCV笔记(二十二):角点检测原理(Harris角点检测原理.Shi-Tomasi角点检测原理)https://blog.csdn.net/qq ...

  10. OpenCV系列之模板匹配 | 三十一

    目标 在本章中,您将学习 使用模板匹配在图像中查找对象 你将看到以下功能:cv.matchTemplate(),cv.minMaxLoc() 理论 模板匹配是一种用于在较大图像中搜索和查找模板图像位置 ...

最新文章

  1. php mysql网站导航跳转_PHP微信公众平台跳转网页实现定位思路 By:阿尚
  2. 给RadioButtonList这些加JS事件
  3. 阿里6年32岁程序员:辞职在中小厂干了快两年,我怎么没有职场危机(年龄)?
  4. Polymorphic form--多态表单
  5. 如何在SAP Kyma的控制台里扩展新的UI
  6. 在Java 8之前的项目中使用JUnit 5
  7. linux帆软内存设置,修改FineReport配置参数
  8. 从零开始写个编译器吧 - tao 语言的文法定义(下)
  9. 调度失败:执行器地址为空_三千字带你搞懂XXL-JOB任务调度平台
  10. Android 模拟器中sd卡的创建 和文件的上传
  11. 深入理解浏览器的缓存机制
  12. dh算法 理论依据_DH算法
  13. linux系统漏洞firefart,记:从文件上传漏洞到获得root权限
  14. 第一次在csdn写博客!
  15. 超级App,风口浪尖的新机遇
  16. 降噪耳机买什么牌子好?口碑质量好的降噪耳机推荐
  17. 拼多多“百亿农研”开辟发展新路径
  18. java eventbus 原理_EventBus的简单使用与原理
  19. hdu 1686 Oulipo(kmp)
  20. 数据化运营chapter3_code--数据处理

热门文章

  1. 【剧前爆米花--爪哇岛寻宝】MySQL中索引和事务
  2. G1D3-读论文-AttacKG;Extractor
  3. 海岛奇兵服务器维修,海岛奇兵更新进不去?不要怕登录异常解决办法有3招
  4. [luogu P2482] [SDOI2010]猪国杀
  5. 药方的量化方法笔记(学习与尝试):第二回 第二次 药方的拆解 量化方法的形式的发展 对药的量化分析
  6. 科技日历|24年前的今天,Java编程官方语言诞生了!
  7. synchronization(同步)的理解
  8. c语言作业 密码翻译,C语言作业 有一行电文,以按下面规律译成密码
  9. windows批处理下载网络文件
  10. 中山大学 2013-2014 校历