首页 > 其他分享 >OpenCV-模板匹配

OpenCV-模板匹配

时间:2024-09-10 20:21:39浏览次数:9  
标签:kele 匹配 cv2 OpenCV template 图像 模板

文章目录

一、简介

在OpenCV中,模型匹配(或称为模板匹配)是一种用于在图像中查找与给定模板最相似区域的技术。OpenCV提供了cv2.matchTemplate()函数来实现模板匹配。这个函数通过滑动模板图像在输入图像上来比较模板和每个可能的窗口区域,并计算它们之间的相似度。

1.定义与原理

模板匹配是一种最原始、最基本的模式识别方法,其核心在于通过已知的小图像(模板)在另一幅大图像中搜寻相同或相似的目标物,并确定其位置。这一过程主要依赖于计算模板图像与待搜索图像中各个区域的相似度。

2.算法与方法

模板匹配算法通常包括以下几个步骤:

读取图像和模板:首先,你需要读取包含要搜索对象的图像(称为输入图像)以及你想要匹配的模板图像。
执行模板匹配:使用cv2.matchTemplate()函数在输入图像上搜索与模板最相似的区域。
查找最佳匹配:通过比较cv2.matchTemplate()函数返回的相似度图,找到与模板最匹配的区域。这通常是通过找到相似度图中的最大值(或最小值,取决于你使用的匹配方法)来完成的。
提取匹配区域:一旦找到最佳匹配的位置,你可以从原始图像中提取该区域的图像。

3.参数解释

result = cv2.matchTemplate(image, templ, method, result=None, mask=None)

  • image:输入图像,需要是8位或32位浮点型。
  • templ:模板图像,大小和类型与输入图像相同。
  • method:指定匹配方法的标志。OpenCV提供了几种不同的方法,如下:
    • TM_SQDIFE平方差匹配法:该方法采用平方差来进行匹配;匹配越好,值越小;匹配越差,值越大。
    • TN_CCORR相关匹配法:该方法采用乘法操作;数值越大表明匹配程度越好。
    • TN_CCOEFF相关系数匹配法:数值越大表明匹配程度越好。
    • TN_SQDIFF_NORMED归一化平方差匹配法,匹配越好,值越小;匹配越差,值越大。
    • TN_CCORR_NORMED归一化相关匹配法,数值越大表明匹配程度越好。
    • TN_CCOEFF_NORMED归一化相关系数匹配法,数值越大表明匹配程度越好。
  • result:匹配结果存储在这个矩阵中,类型为32位浮点数。如果未提供,则自动创建。
  • mask:模板的掩码。只有当模板掩码中的相应元素非零时,才考虑模板或输入图像中的这些元素。

二、代码实现

1.读取数据

import cv2  
  
# 读取图像和模板  
kele = cv2.imread('kl.png')  
template = cv2.imread('template.png')  
  • 使用cv2.imread()函数读取名为’kl.png’的图像文件,并将其存储在变量kele中,同样地,读取名为’template.png’的模板图像文件,并将其存储在变量template中

2.检查图像是否成功加载

if kele is None or template is None:  
    print("Error: Unable to load images.")  
else:  
    # 显示原始图像和模板  
    cv2.imshow('kele', kele)  
    cv2.imshow('template', template)  
    cv2.waitKey(0)  
  • 检查kele和template变量是否为None,即检查图像是否成功加载,如果任一图像未成功加载,则打印错误信息。
  • 如果图像成功加载,则显示原始图像和模板。
    在这里插入图片描述

3.获取模板的高度和宽度

    h, w = template.shape[:2]  
  • 使用shape属性获取模板图像的高度和宽度,并分别存储在h和w中。

4.模板匹配

    res = cv2.matchTemplate(kele, template, cv2.TM_CCOEFF_NORMED)  
    min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res)  
  • 在kele图像上搜索与template模板最相似的区域,使用归一化相关系数匹配方法。
  • 使用cv2.minMaxLoc()函数找到res矩阵中的最小值和最大值及其位置。

5.计算匹配区域坐标

    top_left = max_loc  
    bottom_right = (top_left[0] + w, top_left[1] + h)  
   
    kele_template = cv2.rectangle(kele.copy(), top_left, bottom_right, (0, 255, 0), 2) 
  • 匹配区域的左上角坐标,并根据模板的宽度和高度计算匹配区域的右下角坐标。
  • 在kele图像的副本上绘制矩形,并设置颜色为绿色(0, 255, 0),线宽为2

6.显示图像

    cv2.imshow('kele_template', kele_template)  
    cv2.waitKey(0)  
  
    cv2.destroyAllWindows()
  • 显示带有矩形标记的kele图像副本,窗口标题为’kele_template’
    -

7.全部代码

import cv2  
  
# 读取图像和模板  
kele = cv2.imread('kl.png')  
template = cv2.imread('template.png')  
  
# 检查图像是否成功加载  
if kele is None or template is None:  
    print("Error: Unable to load images.")  
else:  
    # 显示原始图像和模板  
    cv2.imshow('kele', kele)  
    cv2.imshow('template', template)  
    cv2.waitKey(0)  
  
    # 获取模板的高度和宽度  
    h, w = template.shape[:2]  
  
    # 执行模板匹配  
    res = cv2.matchTemplate(kele, template, cv2.TM_CCOEFF_NORMED)  
  
    # 查找最佳匹配(即相似度最高的位置)  
    min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res)  
  
    # 计算匹配区域的左上角和右下角坐标  
    top_left = max_loc  
    bottom_right = (top_left[0] + w, top_left[1] + h)  
  
    # 在原始图像上绘制矩形以标记匹配区域  
    kele_template = cv2.rectangle(kele.copy(), top_left, bottom_right, (0, 255, 0), 2)  
  
    # 显示带有匹配区域的图像  
    cv2.imshow('kele_template', kele_template)  
    cv2.waitKey(0)  
  
    # 清理所有OpenCV窗口  
    cv2.destroyAllWindows()

这段代码展示了如何使用OpenCV进行模板匹配,并在原始图像上标记出匹配的区域。首先检查图像是否成功加载,然后显示原始图像和模板,执行模板匹配,找到最佳匹配位置,并在原始图像的副本上绘制矩形以标记该位置。最后,显示带有匹配区域的图像并关闭所有窗口。

三、总结

OpenCV中的模板匹配是一种在图像中寻找与给定模板最相似区域的方法。改方法相对简单,比较容易理解和实现,同时也可以应用于多种场景,如物体检测、图像识别、图像处理等领域,并且OpenCV中也提供了多种模板匹配算法,可以根据具体情况来选择合适的算法,但是模板匹配对尺度变换比较敏感,比如我们对模板图像进行放大或者缩小操作后,可能会导致无法找到准确的位置,且因为需要遍历待检测图像中的每一个可能位置,并与模板图像进行比较,所有耗时较大。

标签:kele,匹配,cv2,OpenCV,template,图像,模板
From: https://blog.csdn.net/2301_77698138/article/details/142107223

相关文章

  • opencv学习:模板匹配和argparse 模块的代码实现及优缺点
    模板匹配模板匹配算法(TemplateMatchingAlgorithm),这是一种在图像处理和计算机视觉领域常用的方法,用于在一个大图像中寻找一个小模板图像的位置。模板匹配算法通过滑动窗口的方式在目标图像上移动模板图像,并计算模板图像与目标图像的局部区域之间的相似度。算法步骤读取图......
  • 【教师节视频制作祝福】湖边烟花霓虹灯AE模板修改文字软件生成器教程特效素材【AE模板
    教师节祝福视频制作教程湖边烟花霓虹灯AE模板修改文字特效广告生成神器素材玩法AE模板工程怎么如何做的【教师节视频制作祝福】湖边烟花霓虹灯AE模板修改文字软件生成器教程特效素材【AE模板】生日视频制作步骤:下载AE模板安装AE软件把AE模板导入AE软件修改图片或......
  • OpenCV 与 Matplotlib 的结合使用:轮毂检测与目标跟踪
    目录绘制轮廓图像实现思路1.读取图像并转换为灰度图像2.二值化处理3.查找轮廓4.绘制轮廓5.显示结果代码实现效果展示动态逐步显示轮廓结果实现思路1.读取图像并缩放2.转换为灰度图像3.二值化处理4.查找轮廓5.动态显示轮廓6.显示最终结果并关闭窗口......
  • OpenCV 与 YoloV3的结合使用:目标实时跟踪
    目录代码分析1.YOLO模型加载2.视频加载与初始化3.视频帧处理4.物体检测5.处理检测结果6.边界框和类别显示7.帧率(FPS)计算8.结果显示与退出9.资源释放整体代码效果展示总结代码分析这段代码使用YOLO(YouOnlyLookOnce)模型进行视频中的物体检测,并通......
  • 【OpenCV】简介入门及资料文档,工具准备和环境部署
    OpenCV已更新到 4.x,计算机视觉和机器学习的软件库git地址:https://github.com/opencv/opencv1.跨平台:Linux,Windows,Android,MacOS2.由C和C++轻量级编写3.提供C++,Java,Python,Ruby,MATLAB,C#、Ch、Ruby,GO接口应用:图像处理(滤波、边缘检测等)视频处理(实时视频处理等)物体......
  • 最长匹配算法
    1、实例2、详解1)确定目的地址:192.168.2.22)查找路由表中:目的网路/掩码第一步:目的地址与掩码进行二进制与运算  11000000101010000000001000000010&11111111111111110000000000000000                         ......
  • 论文解析二: SuperGlue 同时进行特征匹配以及滤除外点的网络
    目录1.SuperGlue摘要2.SuperGlue网络结构2.1AttentionalGraphNeuralNetwork(注意图神经网络)2.1.1KeyPointEncoder:解决同时进行特征匹配以及滤除外点的网络2.1.2AttentionalAggregation2.2OptimalMatchingLayer(最优匹配层)2.3损失函数3.整体代码详解......
  • 【Python】使用字典进行人员匹配的问题
    要解决这个问题,我们可以编写一个Python脚本,该脚本首先定义一个包含三个学生信息的列表,然后通过用户输入的年龄来筛选出所有该年龄的学生,并打印出他们的个人信息。以下是具体的代码实现:```python#定义一个列表,包含三个学生的信息students=[  {"Name":"张三","Ge......
  • redis 正则匹配符合条件的key 进行删除
    //根据名字的key,如果key数量超过100,就进行一次删除publicintclearRedis(@PathVariable("prefix")Stringprefix)throwsIOException{ScanOptionsoptions=ScanOptions.scanOptions().match(prefix+"*").count(1000).build();Cursorcursor=r......
  • 【机器学习】C++与OpenCV实战:创建你的第一个图片显示程序
    ......