热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

OpenCV(二十)模板匹配

目录一、基础理论1、作用与过程2、原理3、函数matchTemplate二、代码三、效果参考资料一、基础理论1、作用与过程所谓的模板匹配,就是在给定的图

目录

一、基础理论

1、作用与过程

2、原理

3、函数matchTemplate

二、代码

三、效果

参考资料




一、基础理论


1、作用与过程

        所谓的模板匹配,就是在给定的图片中查找和模板最相似的区域,该算法的输入包括模板图片,整个任务的思路就是:按照滑窗的思路不断的移动模板图片,计算其与图像中对应区域的匹配度,最终将匹配度最高的区域选择为最终的结果


2、原理

如果输入图像的大小为(WxH),而模板图像的大小为(wxh),则输出图像的大小将为(W-w + 1,H-h + 1)。得到结果后,可以使用cv.minMaxLoc()函数查找最大/最小值在哪,将其作为矩形的左上角,并以(w,h)作为矩形的宽度高度。该矩形是您模板的区域


3、函数matchTemplate


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

image: 输入图像
templ: 输入模板
method: 方法
        TM_SQDIFF: 计算平方差, 计算出来的值越小, 越相关
        TM_CCORR: 计算相关性, 计算出来的值越大, 越相关
        TM_CCOEFF: 计算相关系数, 计算出来的值越大, 越相关
        TM_SQDIFF_NORMED: 计算归一化平方不同, 计算出来的值越接近 0, 越相关
        TM_CCORR_NORMED: 计算归一化相关性, 计算出来的值越接近 1, 越相关
        TM_CCOEFF_NORMED: 计算归一化系数, 计算出来的值越接近 1, 越相关



二、代码

#模板匹配
import cv2
import os# 1、读取图片 并转化为灰度图(不可以用彩图匹配)
img = cv2.imread("Resource/test11.jpg")# 2、读取模板
template = cv2.imread("Resource/template.jpg")
w, h, c = template.shape #获得模板长宽# 3、模板匹配
rectangle = cv2.matchTemplate(img, template, cv2.TM_CCOEFF)
min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(rectangle)
#最小值 最大值 最小值坐标 最大值坐标# 4、获取匹配模块的左上角和右下角
top_left = max_loc #左上角
bottom_right = (top_left[0]+w, top_left[1]+h) #右下角# 5、画矩形并显示
cv2.rectangle(img, top_left, bottom_right, (0,0,255), 2)
cv2.imshow("matching", img)cv2.waitKey(0)
cv2.destroyAllWindows()


三、效果

原图         模板: 

匹配结果:

  

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


参考资料

https://iamarookie.blog.csdn.net/article/details/119096602

https://www.bilibili.com/video/BV1Fo4y1d7JL?p=39&spm_id_from=pageDriver


推荐阅读
author-avatar
莫轻松
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有