Opencv:matchTemplate函数详解

本文深入介绍了OpenCV中的图像匹配函数`matchTemplate()`,通过6种不同的匹配方法(TM_SQDIFF, TM_SQDIFF_NORMED, TM_CCORR, TM_CCORR_NORMED, TM_CCOEFF, TM_CCOEFF_NORMED)进行图像匹配,并通过示例展示其效果。讨论了每种方法的原理和适用场景,如平方差匹配和相关性匹配。同时,文章还探讨了模板图像亮度和大小变化对匹配结果的影响,揭示了不同方法的稳健性。

前言

  • 本文主要介绍opencv中图像匹配函数

  • 并用示例解释和演示6中匹配方式

  • imshow的说明(为后续部分结果归一化后再显示说明原因)
    1,如果原始图片是8位无符号整数,就按照原来的数字进行显示。也就是数字范围是[0,255]

    2,如果原始图片是16位无符号整数或者32位整数,就除以256进行显示。也就是说0到256*256的范围被压缩到0到255。

    3,如果图片是32位或者64位的浮点类型数据,那么像素值就会乘以255。也就是说,0到1的范围被映射到0到255.

函数讲解

  • opencv实现了一部分通过模板与目标图像进行寻找最佳匹配的方面matchTemplat() , 函数声明如下所示
void cv::matchTemplate(
    cv::InputArray image, // 用于搜索的输入图像
    cv::InputArray teml, // 用于匹配的模板,和image类型相同
    cv::OutputArray result, // 匹配结果图像, 类型 32F
    int method // 用于比较的方法,opencv提供6种
    }
  • 函数调用方式为
    • source_image是原图
    • template_image是选取的需要匹配的特征图
    • target_image是存储匹配值的结果图
matchTemplate(source_image, template_image, target_image, TM_CCOEFF_NORMED);//匹配函数调用
double minVal, maxVal; //用于存储匹配值的最大值和最小值
Point minLoc, maxLoc; //用于存储匹配最大值的位置和最小值的位置

//寻找最佳匹配位置
minMaxLoc(target_image, &minVal, &maxVal, &minLoc, &maxLoc);
//画圈标出匹配点,这里使用maxLoc还是minLoc和选择的匹配method有关
circle(source_image, Point(maxLoc.x + template_image.cols / 2, maxLoc.y + template_image.rows / 2), 10, Scalar(0, 0, 255), 2, 8, 0);

我们将尝试用不同方式来匹配图片中的黄色物品

在这里插入图片描述

opencv支持的比较方法有6种

TM_SQDIFF

  • 基本概念:该方法使用平方差进行匹配,因此最佳的匹配结果在结果为0处,值越大匹配结果越差。
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PSrV45Up-1637512316348)(C:\Users\nishiyu\AppData\Roaming\Typora\typora-user-images\image-20211121211244043.png)]
    • 该方法使用基本的平方差,就是将要匹配的template图片放在一张图上扫描,最好的匹配结果就是0
      在这里插入图片描述
    • 右图是将匹配矩阵中的值映射到0 ---- 1之间显示的,因为需要使用 imshow 对其进行显示
    • 可以看到,左图显示,用该方法能够较好实现匹配。匹配的值越大,图像越亮。从右图中,我们可以看到匹配结果,手中物品匹配结果呈黑色,因此差距很小。

TM_SQDIFF_NORMED

  • 基本概念:该方法使用归一化的平方差进行匹配,最佳匹配也在结果为0处。

    • 这个公式中可以将 T , I T , I T,I 的每个值排列起来看作一个向量,公式可以转化为 R = ∣ T − I ∣ 2 ∣ T ∣   ∣ I ∣ R = \frac{|T-I|^2}{|T|\,|I|} R=T

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

长命百岁️

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值