opencv之模板匹配

什么是模板匹配?

模板匹配是在图像中寻找目标的方法之一。
模板匹配具有自身的局限性,主要表现在它只能进行平行移动若原图像中的匹配目标发生旋转或大小变化,该算法无效

模板匹配的工作方式?
在待检测图像上,从左到右,从上向下计算模板图像与重叠子图像的匹配度,匹配程度越大,两者相同的可能性越大。

opencv提供六种计算匹配度的方法。

对于模板覆盖在原图上的每个位置,都把度量值保存到结果图像 矩阵 ® 中. 在 R 中的每个位置 (x,y) 都包含匹配度量值
在这里插入图片描述
上图就是 TM_CCORR_NORMED 方法处理后的结果图像 R . 最白的位置代表最高的匹配. 正如您所见, 红色椭圆框住的位置很可能是结果图像矩阵中的最大数值, 所以这个区域 (以这个点为顶点,长宽和模板图像一样大小的矩阵) 被认为是匹配的.

模板匹配和卷积很像,模板在原图上从原点开始滑动,计算模板(图像被覆盖的区域)的差别程度,这个差别程度的计算方法在opencv中有6种,然后将每次计算的结果放到一个矩阵中,作为结果输出。
假设原图像是AB大小,而模板是ab大小,则输出的结果矩阵是(A-a+1)*(B-b+1)

以下来讲述opencv如何调用模板匹配

分为以下步骤:

  1. 调用matchTemplate 函数,传入原图、模板图、匹配算法等参数,得到经过匹配算法计算得到的结果矩阵。
  2. 调用minMaxLoc函数,传入上一步的结果矩阵,得到结果的最小值、最大值、最小值坐标,最大值坐标。
  3. 通过上步得到的坐标和最值,使用相应方法画出匹配结果

下面详细介绍这几步。

1. matchTemplate
OpenCV通过函数 matchTemplate 实现了模板匹配算法。

res=cv2.matchTemplate(lenna,lenna_face,cv2.TM_CCOEFF_NORMED)
## res保存结果矩阵R。
## cv2.TM_CCOEFF_NORMED是一种匹配算法

可用的方法有6个:

  1. 平方差匹配 method=CV_TM_SQDIFF
    这类方法利用平方差来进行匹配,最好匹配为0.匹配越差,匹配值越大.在这里插入图片描述

  2. 归一化平方差匹配 method=CV_TM_SQDIFF_NORMED
    在这里插入图片描述

  3. 相关匹配 method=CV_TM_CCORR
    这类方法采用模板和图像间的乘法操作,所以较大的数表示匹配程度较高,0标识最坏的匹配效果.在这里插入图片描述

  4. 归一化相关匹配 method=CV_TM_CCORR_NORMED
    在这里插入图片描述

  5. 系数匹配 method=CV_TM_CCOEFF
    这类方法将模版对其均值的相对值与图像对其均值的相关值进行匹配,1表示完美匹配,-1表示糟糕的匹配,0表示没有任何相关性(随机序列).
    在这里插入图片描述

  6. 化相关系数匹配 method=CV_TM_CCOEFF_NORMED
    在这里插入图片描述

注:通常,随着从简单的测量(平方差)到更复杂的测量(相关系数),我们可获得越来越准确的匹配(同时也意味着越来越大的计算代价). 最好的办法是对所有这些设置多做一些测试实验,以便为自己的应用选择同时兼顾速度和精度的最佳方案.

2. minMaxLoc

min_val,max_val,min_loc,max_loc=cv2.minMaxLoc
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值