学习视频可参见python+opencv3.3视频教学 基础入门
模板匹配
1.模板匹配原理
- 模板匹配是一项在一幅图像中寻找与另一幅模板图像最匹配(相似)部分的技术.
- 原理:在要检测的图像上,从左到右,从上到下遍历这一幅图像,从上到下计算模板与重叠子图像的像素匹配度,如果匹配的程度越大,这说明相同的可能性越大。
2.模板匹配算法
-
OpenCV中的函数 matchTemplate 实现了模板匹配算法
-
平方差匹配 method=CV_TM_SQDIFF
- 最好匹配为0.匹配越差,匹配值越大
-
标准平方差匹配 method=CV_TM_SQDIFF_NORMED
-
最好匹配为0.匹配越差,匹配值越大
-
-
-
相关匹配 method=CV_TM_CCORR
- 采用模板和图像间的乘法操作
- 最好匹配是较大的数,最坏的匹配效果为0
-
标准相关匹配 method=CV_TM_CCORR_NORMED
- 好坏程度衡量同相关匹配CV_TM_CCORR
-
相关匹配 method=CV_TM_CCOEFF
- 将模版对其均值的相对值与图像对其均值的相关值进行匹配
- 1表示完美匹配,-1表示匹配很差,0表示没有任何相关性(随机序列)
- 其中
-
标准相关匹配 method=CV_TM_CCOEFF_NORMED
- 好坏程度衡量同相关匹配 CV_TM_CCOEFF
3.测试用例
-
def template_demo(): tpl=cv.imread("./images/lena_face.png") #模板图 target=cv.imread("./images/lena.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: #如果是标准平方差匹配,0表示匹配结果最好,取最小值 tl=min_loc else: #如果是剩下的两种方法,值越大表示匹配越好,因而选最大值 tl=max_loc br=(tl[0]+tw,tl[1]+th) #矩形右下角坐标 cv.rectangle(target,tl,br,(0,0,255),2) cv.imshow("match-"+np.str(md),target) #cv.imshow("match-" + np.str(md), result)
-
测试结果:
-
-
…(img-uEKLD6hI-1604485972465)]
-
[外链图片转存中…(img-GuvbLtez-1604485972466)]
-
单从此次测试结果来看标准平方差匹配效果好一点
结语
以上内容仅是自我学习时记录的笔记,欢迎大家批评指正,一起学习进步。欢迎大家关注我的公众号小郭学数据。