10 模板匹配

学习视频可参见python+opencv3.3视频教学 基础入门

模板匹配

1.模板匹配原理

  • 模板匹配是一项在一幅图像中寻找与另一幅模板图像最匹配(相似)部分的技术.
  • 原理:在要检测的图像上,从左到右,从上到下遍历这一幅图像,从上到下计算模板与重叠子图像的像素匹配度,如果匹配的程度越大,这说明相同的可能性越大。
    • image-20201008085809590

2.模板匹配算法

  • OpenCV中的函数 matchTemplate 实现了模板匹配算法

  • 平方差匹配 method=CV_TM_SQDIFF

    • 最好匹配为0.匹配越差,匹配值越大
    • image-20201008094839456
  • 标准平方差匹配 method=CV_TM_SQDIFF_NORMED

    • 最好匹配为0.匹配越差,匹配值越大

    • image-20201008094911015

  • 相关匹配 method=CV_TM_CCORR

    • 采用模板和图像间的乘法操作
    • 最好匹配是较大的数,最坏的匹配效果为0
    • image-20201008101048774
  • 标准相关匹配 method=CV_TM_CCORR_NORMED

    • 好坏程度衡量同相关匹配CV_TM_CCORR
    • image-20201008101147367
  • 相关匹配 method=CV_TM_CCOEFF

    • 将模版对其均值的相对值与图像对其均值的相关值进行匹配
    • 1表示完美匹配,-1表示匹配很差,0表示没有任何相关性(随机序列)
    • image-20201008101352151
    • 其中image-20201008101409695
  • 标准相关匹配 method=CV_TM_CCOEFF_NORMED

    • 好坏程度衡量同相关匹配 CV_TM_CCOEFF
    • image-20201008101511916

参见CV学习笔记(十一):模板匹配

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)
    
  • 测试结果:

  • image-20201008102425149

  • image-20201008102450196

…(img-uEKLD6hI-1604485972465)]

  • [外链图片转存中…(img-GuvbLtez-1604485972466)]

  • 单从此次测试结果来看标准平方差匹配效果好一点

结语

以上内容仅是自我学习时记录的笔记,欢迎大家批评指正,一起学习进步。欢迎大家关注我的公众号小郭学数据。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值