基础版笔记传送门:
python3+opencv学习笔记汇总目录(适合基础入门学习)
进阶版笔记目录链接:
python+opencv进阶版学习笔记目录(适合有一定基础)

模板匹配原理

模板匹配(TemplateMatching)就是在一幅图像中寻找和模板图像(template)最相似的区域,该方法原理简单计算速度快,能够应用于目标识别,目标跟踪等多个领域。

模板匹配就是在整个图像区域发现与给定子图像匹配的小块区域。
首先需要一个模板图像T(子图像)和一个待检测的图像(源图像S)
在待检测图像从左到右,从上到下计算模板图像与重叠子图像的匹配度,匹配度越高,两者相同的可能性越大。
缺点:模板图像尺寸和待检测图像尺寸问题。模板尺寸必须小于待检测图片尺寸。

匹配度量的方法有:
CV_TM_SQDIFF 平方差匹配法,最好的匹配为0,值越大匹配越差
CV_TM_SQDIFF_NORMED 归一化平方差匹配法
CV_TM_CCORR 相关匹配法,采用乘法操作,数值越大表明匹配越好
CV_TM_CCORR_NORMED 归一化相关匹配法
CV_TM_CCOEFF 相关系数匹配法,最好的匹配为1,-1表示最差的匹配
CV_TM_CCOEFF_NORMED 归一化相关系数匹配法
前面两种方法为越小的值表示越匹配,后四种方法值越大越匹配。

OpenCV模板匹配实现

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

image:待搜索图像
templ:模板图像
result:匹配结果,是一个矩阵
method:计算匹配程度的方法
cv2.minMaxLoc(src, mask=None)
src是一个矩阵。输入cv2.matchTemplate的返回值

函数功能:假设有一个矩阵a,现在需要求这个矩阵的最小值,最大值,并得到最大值,最小值的索引。索引即位置坐标

import cv2 as cv
import numpy as npdef template_demo():tpl = cv.imread("head.png")#模板target = cv.imread("yangmi.jpg")#待检测图cv.imshow("template image", tpl)#cv.imshow("target image", target)methods = [cv.TM_SQDIFF_NORMED, cv.TM_CCORR_NORMED, cv.TM_CCOEFF_NORMED]#归一化均方误差,归一化相关匹配,归一化相关系数th, tw = tpl.shape[:2]#取高宽,不取通道 模板高宽for md in methods:print(md)result = cv.matchTemplate(target, tpl, md)min_val, max_val, min_loc, max_loc = cv.minMaxLoc(result)#寻找最小值,最大值。最小值位置,最大值位置if md == cv.TM_SQDIFF_NORMED:tl = min_locelse:tl = max_locbr = (tl[0]+tw, tl[1]+th);cv.rectangle(target, tl, br, (0, 0, 255), 2)#在待检测图像上画矩形框。tl为矩形左上角,br为矩形右下角cv.imshow("match-"+str(md), target)#cv.imshow("match-" + np.str(md), result)#"match-" + np.str(md) 为窗口名print("--------- Python OpenCV Tutorial ---------")template_demo()
cv.waitKey(0)cv.destroyAllWindows()

模板图像尺寸必须小于待检测图像尺寸。可以自己修改尺寸,使满足要求。
result结果样子

md=1,3,5
左上角为模板,其余三图为结果、

电气专业的计算机萌新,写博文不容易。如果你觉得本文对你有用,请点个赞再走,谢谢。

opencv进阶学习笔记8:模板匹配相关推荐

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

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

  2. opencv进阶学习笔记3:像素运算和图像亮度对比度调节

    基础版传送门: python3+opencv学习笔记汇总目录(适合基础入门学习) 进阶版目录: python+opencv进阶版学习笔记目录(适合有一定基础) 像素运算 要求两张图大小,以及格式(np ...

  3. opencv进阶学习笔记7:直方图,直方图均衡化,直方图比较,直方图反向投影

    基础版传送门: python3+opencv学习笔记汇总目录(适合基础入门学习) 进阶版笔记目录链接: python+opencv进阶版学习笔记目录(适合有一定基础) 直方图基础讲解: opencv学 ...

  4. opencv进阶学习笔记14:分水岭算法 实现图像分割

    基础版学习笔记目录: python3+opencv学习笔记汇总目录(适合基础入门学习) 进阶版笔记目录链接: python+opencv进阶版学习笔记目录(适合有一定基础) 分水岭算法原理 分水岭算法 ...

  5. opencv进阶学习笔记13:图像形态学操作大全(膨胀,腐蚀,开闭,黑帽,顶帽,梯度)python版

    基础版学习笔记: python3+opencv学习笔记汇总目录(适合基础入门学习) 进阶版笔记目录链接: python+opencv进阶版学习笔记目录(适合有一定基础) 基础版形态学: opencv学 ...

  6. opencv进阶学习笔记12:轮廓发现和对象测量

    基础版笔记目录: python3+opencv学习笔记汇总目录(适合基础入门学习) 进阶版笔记目录链接: python+opencv进阶版学习笔记目录(适合有一定基础) 轮廓发现 1轮廓发现介绍 基础 ...

  7. opencv进阶学习笔记11:cannny边缘检测,直线检测,圆检测

    基础版笔记传送门 python3+opencv学习笔记汇总目录(适合基础入门学习) 进阶版笔记目录链接: python+opencv进阶版学习笔记目录(适合有一定基础) cannny边缘检测 基础版边 ...

  8. opencv进阶学习笔记10:图像金字塔和图像梯度

    基础版笔记传送门: python3+opencv学习笔记汇总目录(适合基础入门学习) 进阶版笔记目录链接: python+opencv进阶版学习笔记目录(适合有一定基础) 图像金字塔 变小 变大 原理 ...

  9. opencv进阶学习笔记6:使用鼠标在图像上绘制矩形框或者多边形框

    基础版笔记传送门: python3+opencv学习笔记汇总目录(适合基础入门学习) 进阶版笔记目录: python+opencv进阶版学习笔记目录(适合有一定基础) 感兴趣区域传统绘制: openc ...

最新文章

  1. Spring AOP编程-传统基于aspectJ切点AOP开发
  2. 微信小程序之旅一(页面渲染)
  3. 利用Windows的启动机制实现拦截360的运行
  4. VS F5自动编译 F5不自动编译
  5. linux网络程序编程
  6. oracle数据库应用中实现汉字“同音”查询(转)
  7. matlab支持向量回归,支持向量回归 MATLAB代码
  8. PayPal WebHook事件异步通知
  9. sublimetext text3比较两个文档的不同
  10. TextView scrollbars setting
  11. iOS -- 使用蒲公英进行内测
  12. Linux top命令参数及使用方法详解
  13. python保存plot图片_Matplotlib savefig只保存图像,不保存行
  14. 大学物理复习笔记——光学
  15. 中科大辅修计算机,中科大新生入学第二考来了——校规考试!(一不小心就挂)...
  16. Java对Json的一系列操作(构建、json与对象的转换)
  17. 若依前后端分离框架——生成数字验证码功能源码学习
  18. 网页素材大宝库:40套高质量的网站纹理背景素材
  19. 如何成为一个内心强大的人
  20. JDK安装教程(超详细,超简单!)

热门文章

  1. mysql connect by_Mysql主从库搭建
  2. ElasticSearch-7.10版本最新万字长文教程【距离搞懂ELK核心你只差这一片文章】
  3. Sentinel+Nacos实现Sentinel的持久化规则,就很nice!
  4. BugKuCTF WEB web3
  5. Game with modulo
  6. unity热更新json_Unity热更新之AssetBundle打包篇
  7. springboot整合redis操作缓存(将查询到的数据放在缓存中)
  8. 【笔记】springboot+spring security登录流程实现
  9. 操作系统 课堂练习题03【20道 经典题目】
  10. RocketMq namesvr 最佳实践