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

识别装甲板

#识别装甲板

整体思路如下:

  • 图像预处理:
    • 选取颜色通道阈值区间
    • 形态学操作
    • 边缘检测
  • 筛选矩形:
    • 查找合适灯条,注意两两灯条之间的距离,是否垂直,角度问题(因为车在转的时候不同侧的灯条容易被错误识别为装甲板)
    • 筛选除去部分矩形(有些灯条组合需要删除)
  • 识别装甲板:
    • 绘图(远距离,近距离分别处理)
  • 判断是否是装甲板:
    • 遍历所有矩形,两两组合判断

##具体实现方法

方法一:hsv色彩分离

  1. 输入视频帧,读取每一帧图像
  2. 颜色空间转换 BGR → HSV
  3. 颜色阈值分割
    • 设定蓝色阈值范围(lower_blue,upper_blue)
    • 使用cv2.inRange()提取蓝色区域
  4. 形态学处理
    • 结构元素(3x3矩形核)
    • 开运算:去噪点
    • 闭运算:填充小孔
  5. 轮廓提取
    • cv2.findContours()检测外轮廓
  6. 灯条筛选
    • 计算轮廓外接矩形 (x, y, w, h)
    • 过滤:宽高比例 h/w > 3
    • 过滤:轮廓面积 > 50
  7. 灯条配对
    • 遍历所有灯条两两组合
    • 过滤条件:
      • 高度差 < 20% 最大高度
      • 灯条中心纵坐标差 < 最大高度50%
      • 中心横向距离在 0.5~5 倍最大高度范围内
  8. 装甲板绘制
    • 根据配对灯条计算矩形框
    • 绘制红色矩形标记
  9. 结果显示与退出
    • cv2.imshow展示
    • 按q退出循环

方法二:通道相减法(但是未使用)

  • 第一步:图像的预处理,从RGB的角度考虑去识别蓝色灯条,也就是说如果蓝色通道的分量要比 其他两个通道都要大,就能说明物体足够蓝,因此一般选择蓝色通道减去红色通道,经过此番操作后, 会发现原图中的蓝色区域仍然有着较高的亮度。
  • 第二步:二值化并取交集,以根据不同的阈值得到不同效果的图片进行不断地调整最后得到一个 最优的阈值
  • 第三步:形态学操作,先用滤波过滤图像,然后一般可以使用闭操作,先膨胀后腐蚀,来增强轮廓的表现。
  • 第四步:寻找轮廓并筛选拟合出的对象

利弊分析与整合(detect.py)

在实际操作中,我发现在近距离使用hsv色彩空间的效果比较好,可能是因为近距离的灯条比较明显,远距离下 灯条的亮度比较暗,使用bgr色彩空间的效果比较好,虽然牺牲了一部分的识别准确率,但是提高了识别的准确率 是真的,然后我分了两个不同的部分进行处理,也就是远距离和近距离采取的方法不同,不同之处见下:

  • 近距离检测(detect_near_distance):
    • 转为 HSV,设定蓝色阈值提取 mask
    • 提取轮廓,筛选为灯条
    • 成对配对灯条,构成装甲板候选对
  • 远距离检测(detect_far_distance):
    • 提取蓝色通道,并二值化
    • 模糊、膨胀、开闭运算增强连通区域
    • 拟合椭圆
    • 两两椭圆进行配对,限制角度、长度、距离、斜率等条件
    • 对配对结果使用NMS进行过滤去重

整体代码:

import cv2
import numpy as np#创建灯条类对象
c
http://www.lryc.cn/news/590577.html

相关文章:

  • 【Jupyter】个人开发常见命令
  • HugeGraph 【图数据库】JAVA调用SDK
  • ByteToMessageDecoder详解
  • Spring AI快速入门
  • VisualVM监控远程Linux的java进程
  • 【SpringBoot】实战-开发接口-用户-注册
  • matlab的伯德图为何从360度显示?应如何修改解决?
  • 基于大数据的网络文学推荐分析系统的设计与实现【海量书籍、自动爬虫】
  • Redis1:高并发与微服务中的键值存储利器
  • mongodb操作巨鹿
  • DHTMLX Suite 9.2 重磅发布:支持历史记录、类Excel交互、剪贴板、拖放增强等多项升级
  • Qt小组件 - 6 异步运行函数
  • Redis深度解析:从缓存到分布式系统的核心引擎
  • Java高并发编程(2)
  • beautiful-react-hooks库——入门实践常用hook详解
  • React之旅-09 useMemo,优化计算性能的利器
  • React 源码7:Lane、React和schedule优先级转换
  • WPF 多窗口分文件实现方案
  • 【MAC】nacos 2.5.1容器docker安装
  • QT——事件系统详解
  • 多语言json文件内\n换行不生效问题
  • React -自定义hooks - 封装双向数据绑定
  • React 中 props 的最常用用法精选+useContext
  • H3CNE综合实验之机器人
  • Antd中使用Table集成 react-resizable实现可伸缩列
  • PowerJob集群机器数为0问题
  • 深度剖析 TDMQ RabbitMQ 版经典队列底层存储机制
  • vue页面不销毁的情况下再返回,总是执行created,而不触发 activated
  • QOpenGLWidget自定义控件— 2D点云显示(支持平移、放缩、绘制网格)
  • SpringBoot集成Minio存储文件,开发图片上传等接口