1、目标匹配函数:cv2.matchTemplate()

res=cv2.matchTemplate(image, templ, method, result=None, mask=None)

image:待搜索图像
templ:模板图像
result:匹配结果
method:计算匹配程度的方法,主要有以下几种

method 含义
CV_TM_SQDIFF 平方差匹配法:该方法采用平方差来进行匹配;最好的匹配值为0;匹配越差,匹配值越大。
CV_TM_CCORR 相关匹配法:该方法采用乘法操作;数值越大表明匹配程度越好。
CV_TM_CCOEFF 相关系数匹配法:1表示完美的匹配;-1表示最差的匹配。
CV_TM_SQDIFF_NORMED 计算归一化平方差,计算出来的值越接近0,越相关
CV_TM_CCORR_NORMED 计算归一化相关性,计算出来的值越接近1,越相关
CV_TM_CCOEFF_NORMED 计算归一化相关系数,计算出来的值越接近1,越相关

2、获取匹配结果函数:cv2.minMaxLoc()

min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(ret)

参数说明:min_val, max_val, min_loc, max_loc 分别表示最小值,最大值,以及最小值和最大值对应的图像中的位置, ret就是cv2.matchTemplate()函数返回的矩阵

# 模板匹配
img = cv2.imread('lena.jpg', 0)
template = cv2.imread('face.jpg', 0)
h, w = template.shape[:2]
methods = ['cv2.TM_CCOEFF', 'cv2.TM_CCOEFF_NORMED', 'cv2.TM_CCORR','cv2.TM_CCORR_NORMED', 'cv2.TM_SQDIFF', 'cv2.TM_SQDIFF_NORMED']
res = cv2.matchTemplate(img, template, cv2.TM_SQDIFF)
min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res)for meth in methods:img2 = img.copy()# 匹配方法的真值method = eval(meth)res = cv2.matchTemplate(img, template, method)min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res)# 如果是平方差匹配TM_SQDIFF或归一化平方差匹配TM_SQDIFF_NORMED,取最小值if method in [cv2.TM_SQDIFF, cv2.TM_SQDIFF_NORMED]:top_left = min_locelse:top_left = max_locbottom_right = (top_left[0] + w, top_left[1] + h)# 画矩形cv2.rectangle(img2, top_left, bottom_right, 255, 2)plt.subplot(121), plt.imshow(res, cmap='gray')plt.xticks([]), plt.yticks([])  # 隐藏坐标轴plt.subplot(122), plt.imshow(img2, cmap='gray')plt.xticks([]), plt.yticks([])plt.suptitle(meth)plt.show()






多对象匹配:我们匹配的是图中的金币,读入的两张图分别是原图和金币模板

img_rgb = cv2.imread('mario.jpg')
img_gray = cv2.cvtColor(img_rgb, cv2.COLOR_BGR2GRAY)
template = cv2.imread('mario_coin.jpg', 0)
h, w = template.shape[:2]res = cv2.matchTemplate(img_gray, template, cv2.TM_CCOEFF_NORMED)
threshold = 0.8
# 取匹配程度大于%80的坐标
loc = np.where(res >= threshold)
#np.where返回的坐标值(x,y)是(h,w),注意h,w的顺序
for pt in zip(*loc[::-1]):  bottom_right = (pt[0] + w, pt[1] + h)cv2.rectangle(img_rgb, pt, bottom_right, (0, 0, 255), 2)cv2.imshow('img_rgb', img_rgb)
cv2.waitKey(0)

opencv学习笔记十八:模板匹配(cv2.matchTemplate、cv2.minMaxLoc)相关推荐

  1. Opencv学习笔记——直方图与模板匹配

    文章目录 一.直方图 1.画直方图 2.mask的使用 3.直方图均值化 4.自适应直方图均衡化 二.模板匹配 1.匹配单个对象 2.匹配多个对象 一.直方图 直方图是像素点数值分布的统计图形表示,也 ...

  2. OpenCV学习(二十) :直方图匹配、对比:calcHist(),minMaxLoc(),compareHist()

    直方图匹配.对比:calcHist ,minMaxLoc,compareHist 1.calcHist()函数 2.归一化:normalize()函数 3.minMaxLoc()函数 4.compar ...

  3. OpenCV学习笔记(十二)——图像分割与提取

    在图像处理的过程中,经常需要从图像中将前景对象作为目标图像分割或者提取出来.例如,在视频监控中,观测到的是固定背景下的视频内容,而我们对背景本身并无兴趣,感兴趣的是背景中出现的车辆.行人或者其他对象. ...

  4. OpenCV学习笔记(八):形态学morpholgy(2):开/闭运算,形态学梯度、顶帽/黑帽morphologyEx()

    OpenCV学习笔记(八):形态学morpholgy(2):开.闭运算,形态学梯度.顶帽.黑帽:morphologyEx() 数学形态学(Mathematical morphology) 是一门建立在 ...

  5. python3.4学习笔记(十八) pycharm 安装使用、注册码、显示行号和字体大小等常用设置...

    python3.4学习笔记(十八) pycharm 安装使用.注册码.显示行号和字体大小等常用设置 Download JetBrains Python IDE :: PyCharm http://ww ...

  6. windows内核开发学习笔记十八:IRP 处理的标准模式

    windows内核开发学习笔记十八:IRP 处理的标准模式 在 Windows 内核中的请求基本上是通过 I/O Request Packet 完成的. I/O manager ---> Dis ...

  7. OpenCV学习(二十三) :模板匹配:matchTemplate(),minMaxLoc()

    OpenCV学习(二十三) :模板匹配:matchTemplate() 1.概述 模板匹配是一种最原始.最基本的模式识别方法,研究某一特定对象物的图案位于图像的什么地方,进而识别对象物,这就是一个匹配 ...

  8. Polyworks脚本开发学习笔记(十八)-用SDK开发Polyworks插件

    Polyworks脚本开发学习笔记(十八)-用SDK开发Polyworks插件 插件是由PolyWorks加载的动态链接库(DLL文件),然后查询Polyworks模块,以确定它们具有哪些功能,提供给 ...

  9. opencv进阶学习笔记8:模板匹配

    基础版笔记传送门: python3+opencv学习笔记汇总目录(适合基础入门学习) 进阶版笔记目录链接: python+opencv进阶版学习笔记目录(适合有一定基础) 模板匹配原理 模板匹配(Te ...

最新文章

  1. poj1195 Mobile phones 二维线段树入门
  2. Workshop | 超高效的设计方法你GET了吗?Design Sprint设计冲刺工作坊
  3. java调用rocketmq_java操作RocketMQ
  4. iOS_9_scrollView分页
  5. LATEX学习篇【二】:论文中的公式技巧QA
  6. python的with as语句_python with (as)语句
  7. 理清逻辑,确保云原生时代应用开发的全生命周期安全
  8. 计算文件的hash值方法 | 使用powershell 以及 使用python
  9. linux 备份路由配置文件,RouterOS的备份和恢复
  10. 知识图谱、Gremlin Traversal Language、RDF、Amazon Nepture 图数据库介绍
  11. c语言全局变量6,C语言全局变量定义方法
  12. 悼念前端大牛司徒正美
  13. C# 计算农历日期方法 2022
  14. leetcode刷题java之739. 每日温度
  15. 2021抖音数据报告
  16. markdown编辑器。
  17. Hadoop随堂练习
  18. 独享ip和共享ip的区别
  19. 【K210】人脸识别 KPU-kpu.run_yolo2()函数说明
  20. 华为云数据库DDS产品深度赋能

热门文章

  1. Python 的 AIML
  2. phpstudy mysql端口_PHP集成环境phpstudy启动时80或者3306端口占用解决办法
  3. 无线通信学习笔记(一)
  4. 深度学习 week1 采访部分补充
  5. JS 计算时间差(月份差、天数差)
  6. 基于SQLSERVER--数据库表的修复
  7. Node.js 15 正式版发布
  8. C语言计算程序运行时间简单实例
  9. Opencv中的convertTo
  10. Linux命令入门教程(二):目录基础篇