首页 > 其他分享 >opencv学习:模板匹配和argparse 模块的代码实现及优缺点

opencv学习:模板匹配和argparse 模块的代码实现及优缺点

时间:2024-09-10 19:20:56浏览次数:3  
标签:argparse 匹配 -- 优缺点 cv2 opencv 参数 图像 模板

模板匹配

模板匹配算法(Template Matching Algorithm),这是一种在图像处理和计算机视觉领域常用的方法,用于在一个大图像中寻找一个小模板图像的位置。模板匹配算法通过滑动窗口的方式在目标图像上移动模板图像,并计算模板图像与目标图像的局部区域之间的相似度。

算法步骤

  1. 读取图像

    • kele 是目标图像,其中可能包含模板图像。
    • temple 是模板图像,即我们希望在目标图像中找到的图像。
      kele=cv2.imread('kele.png')
      temple=cv2.imread('temple.png')
  2. 获取模板尺寸

    • 使用 temple.shape[:2] 获取模板图像的高度和宽度。
      h,w=temple.shape[:2]
  3. 模板匹配操作

    • 使用 cv2.matchTemplate() 函数进行模板匹配。这个函数在目标图像上滑动模板图像,并计算每个位置的匹配度。
    • cv2.TM_CCOEFF_NORMED 是匹配方法之一,它使用标准化的相关系数来衡量匹配度。这种方法对亮度变化和对比度变化具有一定程度的鲁棒性。
      res=cv2.matchTemplate(kele,temple,cv2.TM_CCOEFF_NORMED)
  4. 找到最佳匹配位置

    • cv2.minMaxLoc() 函数用于找到匹配结果矩阵中的最小值和最大值及其位置。在这个上下文中,最大值位置 maxloc 表示最佳匹配的位置。
      minval,maxval,minloc,maxloc=cv2.minMaxLoc(res)
  5. 计算匹配区域的坐标

    • topleft 是最佳匹配的左上角坐标。
    • bottomright 是匹配区域的右下角坐标,通过将 topleft 与模板图像的尺寸相加得到。
      topleft=maxloc
      bottomright=(topleft[0]+w,topleft[1]+h)
  6. 在原图上绘制矩形框

    • 使用 cv2.rectangle() 在目标图像上绘制一个矩形框,标记出匹配区域。
      keletemple=cv2.rectangle(kele,topleft,bottomright,(0,255,0),2)
  7. 显示结果图像

    • 使用 cv2.imshow() 显示结果图像,其中包括绘制的矩形框。
      cv2.imshow('keletemple',keletemple)
      cv2.waitKey(0)

argparse 模块

argparse 模块的命令行参数解析脚本。argparse 模块用于编写用户友好的命令行接口。程序定义了一组参数,用户可以在命令行中设置这些参数的值,或者使用默认值。

  1. 导入 argparse 模块

    import argparse
  2. 创建 ArgumentParser 对象

    parser = argparse.ArgumentParser()

    这行代码创建了一个 ArgumentParser 对象,用于处理命令行参数。

  3. 添加参数

    • --serial:一个字符串类型的参数,用于指定串行端口,有一个默认值 'com5'。
    • --area:一个整数类型的参数,用于指定面积,默认值为 1500。
    • --confid:一个浮点数类型的参数,用于指定信任度,默认值为 0.8。
    • --aaa:一个整数类型的参数,有一个默认值 100。
    • -b 和 --bb:这是同一个参数的短选项和长选项,用于指定一个整数,默认值为 10。
  4. 解析命令行参数

    opt = parser.parse_args()

    这行代码解析命令行参数,并将解析后的参数存储在 opt 对象中。

  5. 访问参数值

    aa = opt.aaa
    bb = opt.bb

    这两行代码从 opt 对象中获取 --aaa--bb 参数的值。

  6. 使用示例

    假设这段代码保存在名为 script.py 的文件中,你可以在命令行中运行以下命令来传递参数:

    python script.py --serial com3 --area 2000 --confid 0.9 --aaa 150 -b 20

     7. 输出结果

模板匹配算法优缺点

1. 优点:

  • 实现简单,易于理解和编程。
  • 对于简单场景和应用,效果较好。

2. 缺点:

  • 对光照、遮挡和图像噪声敏感。
  • 计算量大,特别是在大图像或多模板的情况下。

argparse 模块优缺点

1. 优点:

  • 易于使用,可以自动生成帮助和使用说明。
  • 支持参数的类型检查和默认值设置。
  • 可以处理复杂的命令行参数结构。

2. 缺点:

  • 对于非常复杂的命令行界面,可能需要更多的定制化。

标签:argparse,匹配,--,优缺点,cv2,opencv,参数,图像,模板
From: https://blog.csdn.net/mohanyelong/article/details/142106802

相关文章

  • 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接口应用:图像处理(滤波、边缘检测等)视频处理(实时视频处理等)物体......
  • 【机器学习】C++与OpenCV实战:创建你的第一个图片显示程序
    ......
  • qt5.15.2+opencv4.10+VS2019_64 均值滤波,高斯滤波算法详细分析
    目录 一.加载图像二.灰度图像三.均值滤波1.均值滤波均值滤波算法(MeanFiltering):    参数含义:    一句话总结:均值滤波特点:应用场景:缺点:2.高斯滤波高斯滤波算法(GaussianBlur):        高斯滤波计算过程:    参数含义:    ......
  • opencv学习:图像轮廓识别及代码实现
    图像轮廓1.获取图像轮廓cv2.findContours()函数是OpenCV库中用于检测图像中轮廓的函数。它可以检测到图像中所有连通区域的边界,并返回这些轮廓的列表。从OpenCV3.4版本开始,这个函数的返回值和参数有所变化,以下是详细的参数说明:方法:contours,hierarchy=cv2.findCon......
  • 基于ARM芯片与OpenCV的工业分拣机器人项目设计与实现流程详解
    一、项目概述项目目标和用途本项目旨在设计和实现一套工业分拣机器人系统,能够高效、准确地对不同类型的物品进行自动分拣。该系统广泛应用于物流、仓储和制造业,能够显著提高工作效率,降低人工成本。技术栈关键词ARM芯片步进电机控制OpenCV图像识别无线通信模块......
  • Prometheus的拉取模式与zabbix推送模式有何区别?各有什么优缺点?
    Prometheus的拉取模式与Zabbix的推送模式在监控数据收集和处理方式上存在显著区别。以下是它们的主要区别及各自的优缺点:1.数据收集模式Prometheus拉取模式:Prometheus定期从被监控的目标(如Exporter、应用程序等)主动拉取数据。每个目标都需要暴露一个HTTP接口,Prome......
  • OpenCV(cv::Mat::setTo())
    目录1.函数定义2.示例3.使用场景4.性能5.注意事项cv::Mat::setTo()是OpenCV中用于将矩阵中的所有元素设置为一个给定的值。它可以应用于整个矩阵,也可以通过掩码(mask)仅对部分矩阵进行操作。这个函数常用于图像处理中的多种场景,例如图像填充、区域修改等。1.函数定......
  • MySQL索引学习记录(创建、删除、优缺点、底层结构、生失效原则等等)
    1.认识索引1.什么是索引MySQL官方对索引的定义为:索引(index)是帮助MySQL高效获取数据的数据结构(有序)。在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查找算法,这种数据结构就是索引。将数据......