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:
相关推荐
AIGC方案6 分钟前
深度学习、机器学习及强化学习的联系与区别
人工智能·深度学习·机器学习
m0_620607818 分钟前
机器学习——朴素贝叶斯练习题
人工智能·机器学习
说私域19 分钟前
场景新零售:基于开源AI大模型AI智能名片S2B2C商城小程序源码的商业本质回归与创新
人工智能·小程序·开源·零售
wtsafe37 分钟前
特种设备事故背后,叉车智能监控系统如何筑牢安全防线
人工智能·安全
愚公搬代码40 分钟前
【愚公系列】《Manus极简入门》040-科技与组织升级顾问:“项目掌舵人”
人工智能·科技·agi·ai agent·智能体·manus
web1508541593542 分钟前
使用Python开发经典俄罗斯方块游戏
python·游戏·pygame
缘友一世1 小时前
PyTorch LSTM练习案例:股票成交量趋势预测
pytorch·python·lstm
新加坡内哥谈技术1 小时前
Google DeepMind 推出AlphaEvolve
人工智能·科技
xiaohanbao091 小时前
day26 Python 自定义函数
开发语言·python·学习·机器学习·信息可视化·numpy
⁤͏͏⁦⁠͏1 小时前
5月15日day26打卡
python