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

Opencv之模板匹配可视化

模板匹配

目录

  • 模板匹配
    • 1 概念函数理解
      • 1.1 概念
      • 1.2 步骤
      • 1.3 函数
    • 2 实际测试
      • 2.1 图片数据
      • 2.2 代码测试

1 概念函数理解


1.1 概念

模板匹配是一种在较大图像中寻找与给定模板图像最相似区域的技术。它是图像处理和计算机视觉中的一个基本任务,广泛应用于各种领域,如物体识别、图像检索和视频监控等。

1.2 步骤

  1. 选择模板:首先,确定您想在较大图像中查找的小图像区域(模板)。
  2. 滑动窗口:将模板图像在较大图像上滑动,从左到右,从上到下,确保模板图像覆盖大图像的每一个可能位置。
  3. 相似度度量:在每个位置,计算模板图像与较大图像中对应区域的相似度。常用的相似度度量方法包括:
    • 绝对差值和(Sum of Absolute Differences, SAD)
    • 平方差和(Sum of Squared Differences, SSD)
    • 归一化互相关(Normalized Cross-Correlation, NCC)
    • 结构相似性指数(Structural Similarity Index, SSIM)
  4. 找到最佳匹配:相似度度量的结果产生一个分数,表示模板与较大图像中每个位置的匹配程度。最高分数的位置被认为是最佳匹配。
  5. 结果输出:输出最佳匹配的位置,有时还包括匹配度量的分数。
    模板匹配的一个关键挑战是它对图像的缩放、旋转和光照变化比较敏感。为了提高匹配的鲁棒性,可能需要对模板或搜索图像进行预处理,如归一化、直方图均衡化或使用更复杂的特征匹配方法。

1.3 函数

cv2.matchTemplate(img,tem,method) 匹配,一般设置此三个参数,其他参数默认result=None, mask=None,返回值为得分

具体如下:

  1. img: 待搜索的图像,即大图像,可以是灰度图像或者彩色图像。
  2. templ: 搜索的模板,它必须不大于待搜索的图像,并且与img具有相同的类型(灰度或彩色)。
  3. method: 用于比较模板和图像的匹配方法。以下是可用的方法:
    • cv2.TM_SQDIFF: 平方差和(Sum of Squared Differences)
    • cv2.TM_SQDIFF_NORMED: 归一化的平方差和
    • cv2.TM_CCORR: 相关性系数
    • cv2.TM_CCORR_NORMED: 归一化的相关性系数
    • cv2.TM_CCOEFF: 相关系数的系数
    • cv2.TM_CCOEFF_NORMED: 归一化的相关系数的系数
  4. result: 匹配结果图像,它是一个浮点单通道图像,其大小取决于模板的大小。如果img的大小是(W x H),而templ的大小是(w x h),则result的大小将是((W-w+1) x (H-h+1))。
  5. mask: 可选参数,用于指定模板图像的掩码。当模板图像不完整或者您只对模板图像的某个部分感兴趣时,可以使用掩码。掩码必须是一个单通道与templ大小相同的图像。

2 实际测试


2.1 图片数据

在这里插入图片描述

在这里插入图片描述

2.2 代码测试

代码展示:

import cv2
import numpy as np


img = cv2.imread('tu.jpg')
img_gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
tem = cv2.imread('jian.jpg',0)
tem_rot90 = np.rot90(tem,k=1)
tem_rot90_1 =np.rot90(tem,k=-1)

tem_list = [tem,tem_rot90,tem_rot90_1]
for i in tem_list:
    h, w = i.shape[:2]
    res = cv2.matchTemplate(img_gray, i, cv2.TM_CCOEFF_NORMED)
    # 设置阈值
    thr = 0.9
    # 匹配结果得分大于阈值的坐标
    loc = np.where(res>=thr)
    # 根据坐标画出矩形轮廓
    for pt in zip(*loc[::-1]):
        cv2.rectangle(img,pt,(pt[0]+w,pt[1]+h),(255,0,0),1)
        
cv2.imshow('tem',tem)
cv2.waitKey(0)
cv2.imshow('res',img)
cv2.waitKey(0)

运行结果:

在这里插入图片描述

  • 调试
    res:
    在这里插入图片描述
    loc:
    在这里插入图片描述

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

相关文章:

  • 记一次OpenEuler Linux磁盘分区表损坏的数据恢复
  • React:构建用户界面的JavaScript库
  • Sonatype Nexus OSS 构建私有docker 仓库
  • RNN之:LSTM 长短期记忆模型-结构-理论详解-及实战(Matlab向)
  • 【Linux】操作系统与进程概念
  • gesp(C++五级)(4)洛谷:B3872:[GESP202309 五级] 巧夺大奖
  • Flutter:使用FVM安装多个Flutter SDK 版本和使用教程
  • java -jar启动项目报错:XXX.jar中没有主清单属性
  • 小游戏前端地区获取
  • Django基础之ORM初识
  • Windows图形界面(GUI)-QT-C/C++ - Qt图形绘制详解
  • 长安“战疫”网络安全公益赛的一些随想
  • 基础理论知识:无人机图数传数据链技术详解
  • 多租户架构是什么?
  • 初学stm32 --- ADC采集内部温度传感器
  • 如何调整 Nginx 工作进程数以提升性能
  • 怎么实现Redis的高可用?
  • html中鼠标位置信息
  • 【HarmonyOS NAPI 深度探索4】安装开发环境(Node.js、C++ 编译器、node-gyp)
  • Go语言的面向对象接口说明及代码示例
  • 用户登录/登出功能,当登录页面在另一域名下
  • 探索图像编辑的无限可能——Adobe Photoshop全解析
  • 【C语言面试题精选及详细解答】
  • node.js的进程保活
  • 设计模式之结构型模式
  • 2025封禁指定国家ip-安装xtables-addons记录