Opencv之模板匹配可视化

模板匹配

目录

  • 模板匹配
    • [1 概念函数理解](#1 概念函数理解)
      • [1.1 概念](#1.1 概念)
      • [1.2 步骤](#1.2 步骤)
      • [1.3 函数](#1.3 函数)
    • [2 实际测试](#2 实际测试)
      • [2.1 图片数据](#2.1 图片数据)
      • [2.2 代码测试](#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 代码测试

代码展示:

python 复制代码
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:
相关推荐
shangjian00740 分钟前
AI-大语言模型LLM-Transformer架构4-多头注意力、掩码注意力、交叉注意力
人工智能·语言模型·transformer
努力犯错44 分钟前
如何使用AI图片扩展器扩展图片边界:2026年完整指南
人工智能
晨非辰1 小时前
Linux权限管理速成:umask掩码/file透视/粘滞位防护15分钟精通,掌握权限减法与安全协作模型
linux·运维·服务器·c++·人工智能·后端
丝斯20112 小时前
AI学习笔记整理(63)——大模型对齐与强化学习
人工智能·笔记·学习
延凡科技5 小时前
无人机低空智能巡飞巡检平台:全域感知与智能决策的低空作业中枢
大数据·人工智能·科技·安全·无人机·能源
2501_941329725 小时前
YOLOv8-SEAMHead改进实战:书籍检测与识别系统优化方案
人工智能·yolo·目标跟踪
晓翔仔7 小时前
【深度实战】Agentic AI 安全攻防指南:基于 CSA 红队测试手册的 12 类风险完整解析
人工智能·安全·ai·ai安全
百家方案7 小时前
2026年数据治理整体解决方案 - 全1066页下载
大数据·人工智能·数据治理
北京耐用通信7 小时前
工业自动化中耐达讯自动化Profibus光纤链路模块连接RFID读写器的应用
人工智能·科技·物联网·自动化·信息与通信
Hgfdsaqwr8 小时前
Django全栈开发入门:构建一个博客系统
jvm·数据库·python