当前位置: 首页 > article >正文

14篇--模板匹配

原理

模板匹配就是用模板图(通常是一个小图)在目标图像(通常是一个比模板图大的图片)中不断的滑动比较,通过某种比较方法来判断是否匹配成功。

匹配方法

1. 平方差匹配TM_SQDIFF

以模板图与目标图所对应的像素值使用平方差公式来计算,其结果越小,代表匹配程度越高,计算过程举例如下。

注意:模板匹配过程皆不需要边缘填充,直接从目标图像的左上角开始计算。

 2. 归一化平方差匹配TM_SQDIFF_NORMED

与平方差匹配类似,只不过需要将值统一到0到1,计算结果越小,代表匹配程度越高,计算过程举例如下。

3.相关匹配TM_CCORR 

使用对应像素的乘积进行匹配,乘积的结果越大其匹配程度越高,计算过程举例如下。

4. 归一化相关匹配TM_CCORR_NORMED 

与相关匹配类似,只不过是将其值统一到0到1之间,值越大,代表匹配程度越高,计算过程如下。

 5. 相关系数匹配TM_CCOEFF

需要先计算模板与目标图像的均值,然后通过每个像素与均值之间的差的乘积再求和来表示其匹配程度,1表示完美的匹配,-1表示最差的匹配,计算过程举例如下。

6. 归一化相关系数匹配TM_CCOEFF_NORMED

也是将相关系数匹配的结果统一到0到1之间,值越接近1代表匹配程度越高,计算过程举例如下。

绘制轮廓 

找到符合要求的区域后,需要使用绘制轮廓组件将其在目标图像中绘制出来,通过记录下来的符合要求的区域位置与模板的宽和高,就能在目标图像中将模板框选出来。

示例代码

import cv2
import numpy as np

# 1、读取原图 + 灰度化
img = cv2.imread("./ctrl.png")
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# 2、读取模板图 + 灰度化
template = cv2.imread("./basketball.jpg")
template_gray = cv2.cvtColor(template, cv2.COLOR_BGR2GRAY)
# 读取模板图的宽高
h, w = template_gray.shape[:2]

# 3、进行模板匹配
# cv2.matchTemplate()返回值是一个和原图同等大小的二维数组,存储的不是像素值而是匹配程度
# 若使用了归一化,存储的就是0到1之间的浮点数值
ret = cv2.matchTemplate(img_gray,       # 参数1 原图
                  template_gray,        # 参数2 模板图
                  cv2.TM_CCOEFF_NORMED  # 参数3 匹配方法 6种
                  )
# 设置一个匹配阈值,用于判断匹配程度大于多少才算匹配上
threshold = 0.8
# 调用np库中where函数
# 返回一个有两个array数组的元组,第一个元素是loc[0] y坐标,第二个元素是loc[1] x坐标
loc = np.where(ret >= threshold)
# 遍历匹配点
for x, y in zip(loc[1], loc[0]):
    # 绘制轮廓——矩形
    cv2.rectangle(img,              # 原图像
                  (x, y),           # 左上角
                  (x + w, y + h),   # 右下角
                  (0, 0, 255),
                  2
                  )


cv2.imshow('image', img)
cv2.imshow('template', template)
cv2.waitKey(0)


http://www.kler.cn/a/445402.html

相关文章:

  • MyBatis入门的详细应用实例
  • 音频接口:PDM TDM128 TDM256
  • 项目搭建+删除(单/批)
  • linux---多线程
  • EGO Swarm翻译
  • MySQL 在window免安装启动
  • C# 表达式树
  • C++ 11(1)
  • FPGA 基础了解
  • js日期时区问题
  • 初学stm32 --- PWM输出
  • 网络视频监控平台/安防监控/视频综合管理Liveweb视频汇聚平台解决方案
  • 鸿蒙项目云捐助第十一讲鸿蒙App应用的捐助成功自定义对话框组件实现
  • ubuntu 24.04-无域名创建本机和局域网和同网段局域网机器可访问的https网页服务
  • JAVA:组合模式(Composite Pattern)的技术指南
  • Nginx负载均衡(upstream)
  • SM2 算法介绍
  • UG NX二次开发(C#)-机电概念设计-UIStyler中selection块选择信号等对象的过滤器设置
  • Python语法之列表(包含检测练习)
  • 第十七章:反射+设计模式
  • facebook商业管理平台有什么作用?
  • 计算机网络 八股青春版
  • Spring Boot 2.1.7 数据源自动加载过程详解
  • 计算机图形学与虚拟现实(VR):相关学点、图形学、虚拟现实、未来发展
  • 细粒度生物医学多模态对比学习
  • OpenSSL 心脏滴血漏洞(CVE-2014-0160)