opencv进阶学习笔记8:模板匹配
基础版笔记传送门:
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:模板匹配相关推荐
- OpenCV 学习笔记(模板匹配)
OpenCV 学习笔记(模板匹配) 模板匹配是在一幅图像中寻找一个特定目标的方法之一.这种方法的原理非常简单,遍历图像中的每一个可能的位置,比较各处与模板是否"相似",当相似度足够 ...
- opencv进阶学习笔记3:像素运算和图像亮度对比度调节
基础版传送门: python3+opencv学习笔记汇总目录(适合基础入门学习) 进阶版目录: python+opencv进阶版学习笔记目录(适合有一定基础) 像素运算 要求两张图大小,以及格式(np ...
- opencv进阶学习笔记7:直方图,直方图均衡化,直方图比较,直方图反向投影
基础版传送门: python3+opencv学习笔记汇总目录(适合基础入门学习) 进阶版笔记目录链接: python+opencv进阶版学习笔记目录(适合有一定基础) 直方图基础讲解: opencv学 ...
- opencv进阶学习笔记14:分水岭算法 实现图像分割
基础版学习笔记目录: python3+opencv学习笔记汇总目录(适合基础入门学习) 进阶版笔记目录链接: python+opencv进阶版学习笔记目录(适合有一定基础) 分水岭算法原理 分水岭算法 ...
- opencv进阶学习笔记13:图像形态学操作大全(膨胀,腐蚀,开闭,黑帽,顶帽,梯度)python版
基础版学习笔记: python3+opencv学习笔记汇总目录(适合基础入门学习) 进阶版笔记目录链接: python+opencv进阶版学习笔记目录(适合有一定基础) 基础版形态学: opencv学 ...
- opencv进阶学习笔记12:轮廓发现和对象测量
基础版笔记目录: python3+opencv学习笔记汇总目录(适合基础入门学习) 进阶版笔记目录链接: python+opencv进阶版学习笔记目录(适合有一定基础) 轮廓发现 1轮廓发现介绍 基础 ...
- opencv进阶学习笔记11:cannny边缘检测,直线检测,圆检测
基础版笔记传送门 python3+opencv学习笔记汇总目录(适合基础入门学习) 进阶版笔记目录链接: python+opencv进阶版学习笔记目录(适合有一定基础) cannny边缘检测 基础版边 ...
- opencv进阶学习笔记10:图像金字塔和图像梯度
基础版笔记传送门: python3+opencv学习笔记汇总目录(适合基础入门学习) 进阶版笔记目录链接: python+opencv进阶版学习笔记目录(适合有一定基础) 图像金字塔 变小 变大 原理 ...
- opencv进阶学习笔记6:使用鼠标在图像上绘制矩形框或者多边形框
基础版笔记传送门: python3+opencv学习笔记汇总目录(适合基础入门学习) 进阶版笔记目录: python+opencv进阶版学习笔记目录(适合有一定基础) 感兴趣区域传统绘制: openc ...
最新文章
- Spring AOP编程-传统基于aspectJ切点AOP开发
- 微信小程序之旅一(页面渲染)
- 利用Windows的启动机制实现拦截360的运行
- VS F5自动编译 F5不自动编译
- linux网络程序编程
- oracle数据库应用中实现汉字“同音”查询(转)
- matlab支持向量回归,支持向量回归 MATLAB代码
- PayPal WebHook事件异步通知
- sublimetext text3比较两个文档的不同
- TextView scrollbars setting
- iOS -- 使用蒲公英进行内测
- Linux top命令参数及使用方法详解
- python保存plot图片_Matplotlib savefig只保存图像,不保存行
- 大学物理复习笔记——光学
- 中科大辅修计算机,中科大新生入学第二考来了——校规考试!(一不小心就挂)...
- Java对Json的一系列操作(构建、json与对象的转换)
- 若依前后端分离框架——生成数字验证码功能源码学习
- 网页素材大宝库:40套高质量的网站纹理背景素材
- 如何成为一个内心强大的人
- JDK安装教程(超详细,超简单!)
热门文章
- mysql connect by_Mysql主从库搭建
- ElasticSearch-7.10版本最新万字长文教程【距离搞懂ELK核心你只差这一片文章】
- Sentinel+Nacos实现Sentinel的持久化规则,就很nice!
- BugKuCTF WEB web3
- Game with modulo
- unity热更新json_Unity热更新之AssetBundle打包篇
- springboot整合redis操作缓存(将查询到的数据放在缓存中)
- 【笔记】springboot+spring security登录流程实现
- 操作系统 课堂练习题03【20道 经典题目】
- RocketMq namesvr 最佳实践