0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于 OpenCV 的车辆变道检测

电子设计 来源:电子设计 作者:电子设计 2020-12-08 23:06 次阅读
文章转载于微信公众号:小白学视觉
作者: 努比

本期教程我们将和小伙伴们一起研究如何使用计算机视觉和图像处理技术来检测汽车在行驶中时汽车是否在改变车道!大家一定听说过使用OpenCV 的haar级联文件可以检测到面部、眼睛等,但是如果目标是汽车,公共汽车呢?

01. 数据集

我们将道路上汽车的视频文件用作数据集。当然可以使用图像数据集检测来汽车,但是由于汽车在变道时我们需要通过弹出窗口提供警报,因此对于这些动态情况,视频输入更为可行。

02. 输入

第一步是提供要在本教程中使用的输入-OpenCV的haar级联文件,用于检测汽车的坐标,道路上的汽车的视频文件-

cascade_src = 'cascade/cars.xml'

cv2.VideoCapture()方法用于捕获输入视频,视频通常为每秒25个图像/帧(fps)。捕获输入后,使用循环提取帧,并使用汽车的haar级联文件检测到的坐标,我们在循环中在汽车周围绘制一个矩形,以在对捕获的帧执行其他操作时获得一致性。

while(1):

在OpenCV中,使用BGR而不是RGB,因此(0,0,255)将在汽车上绘制一个红色矩形,而不是蓝色。

03. 图像处理

如果帧的分辨率很高,则会减慢执行的操作,此外,该帧还包含噪声,可以使用模糊降低噪声,这里使用高斯模糊。

3.1 HSV框架

在此,我们使用从cv2.VideoCapture()捕获的帧中获得的HSV帧仅突出显示汽车转弯的点,并遮挡其余道路和在道路上直行的汽车。设置上限和下限阈值是为了定义HSV中的颜色范围,以查看汽车改变车道的点,并用作框架的遮罩。以下是用于获取此代码的代码段-

3.2腐蚀与膨胀

腐蚀和膨胀是图像处理中常使用的两个基本形态学操作。腐蚀算子在内核区域上具有局部最小值的作用。腐蚀用于减少图像中的斑点噪声,斑点会从图像中的对象边界腐蚀掉。膨胀具有局部最大值运算符的作用。当添加像素以平滑图像中对象的边界时,将使用膨胀来重新获得一些丢失的区域。现在,通过基本形态学操作(腐蚀和膨胀)处理从HSV帧的第一步生成的蒙版。通过将帧和掩码之间的按位与运算应用于获取 ROI(感兴趣区域),可以生成结果帧。

    kernel = np.ones((3,3),np.uint8)

3.3车道检测

canny边缘检测器与霍夫线变换一起用于检测车道。


canny边缘检测(作者提供的图像)

04. 边缘检测

诸如canny边缘检测器之类的算法用于查找将图像中的边缘像素,但是由于我们无法融合某些点和边缘,因此它无法找到实际对象,在这里我们可以使用OpenCV中的cv2.findContours()实现轮廓的查找。

定义-“轮廓是代表图像中曲线的点的列表。”等高线由序列表示(序列是结构的链表),每个序列都编码有关下一点位置的信息。我们在ROI中多次运行cv2.findContours()以获得实体,然后使用cv2.drawContours()绘制轮廓区域。等高线可以是点,边,多边形等,因此在绘制等高线时,我们进行多边形近似,以找到边的长度和区域的面积。函数cv2.drawContours()的工作方式是从根节点开始绘制一棵树(数据结构),然后将后续点,边界框和freeman链代码连接在一起。

找到轮廓后的另一个重要任务是匹配它们。轮廓匹配意味着我们有两个单独的计算轮廓相互比较,或者轮廓与抽象模板相比较。

thresh = mask

05. 中心

我们可以通过计算轮廓矩来比较两个轮廓。“中心矩是通过将轮廓的所有像素相加而得出的轮廓的总体特征。”

中心矩型-

  • 空间矩:m00,m10,m01,m20,m11,m02,m30,m21,m12,m03。
  • 中心矩:mu20,mu11,mu02,mu30,mu21,mu12,mu03。
  • Hu矩:有七个Hu矩(h0 — h6)或(h1 — h7),两种表示法都使用。

我们使用cv2.fitEllipse()计算矩并将椭圆拟合在这些点上。从轮廓和力矩中得出角度,因为改变车道需要45度旋转,这被认为是汽车转弯角度的阈值。

现在,我们不仅可以打印检测变化的车道,还可以使用Tkinter作为一个简单的弹出窗口来提醒更改。

使用Greenline测量角度,并在框架中的汽车上绘制矩形

弹出警报(作者提供的图片)


输出

06. 总结

在本教程中,使用车道变更检测方法探索了智能汽车导航的小型演示。计算机视觉正在迅速发展,其应用不仅在汽车的本地导航中而且在火星导航和产品检查领域中也在不断发展,甚至医疗应用也正在开发中,并可以在早期用于检测X射线图像中的癌症和肿瘤阶段。

代码链接:https://github.com/Hitesh-Val.../_Opencv

参考文献:

  1. Bradski, Gary and Kaehler, Adrian_,_Learning OpenCV: Computer Vision in C++ with the OpenCV Library, O’Reilly Media, Inc., 2nd edition, 2013, @10.5555/2523356, ISBN — 1449314651.
  2. Laganiere, Robert, OpenCV Computer Vision Application Programming Cookbook, Packt Publishing, 2nd edition, 2014, @10.5555/2692691, ISBN — 1782161481.

推荐阅读

审核编辑:符乾江
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • AI
    AI
    +关注

    关注

    87

    文章

    27561

    浏览量

    265185
  • 深度学习
    +关注

    关注

    73

    文章

    5335

    浏览量

    120188
收藏 人收藏

    评论

    相关推荐

    巍泰技术毫米波雷达如何助力道路车辆预警?静态目标检测是关键

    毫米波雷达可以识别静态目标,但在某些应用场景下,为了防止功能误触,会滤除静止目标的特征。然而,在车辆预警的实际应用中,静态目标的检测十分必要。目前用于雾天安全行车诱导的车辆检测技术主要
    的头像 发表于 02-27 15:59 684次阅读
    巍泰技术毫米波雷达如何助力道路<b class='flag-5'>车辆</b>预警?静态目标<b class='flag-5'>检测</b>是关键

    WTR-563 雾区车辆检测雷达

    产品概述:WTR-563可对车道上动态、静态车辆目标进行准确探测,并有效提取静止车辆信息,辅助进行当前路端事件判断,如交通拥堵、车辆违法、车辆追尾等。雷达安装在道路侧面,
    发表于 02-22 15:50 0次下载

    在核桃派上实现USB摄像头的OpenCV颜色检测

    在前几周的文章中已经介绍过如何在核桃派上用OpenCV读取图像并显示到pyqt5的窗口上,这里在上一篇文章的基础上,给开发板加入颜色检测功能,尝试将图像中所有蓝色的东西都用一个框标记出来。
    的头像 发表于 01-20 17:50 649次阅读
    在核桃派上实现USB摄像头的<b class='flag-5'>OpenCV</b>颜色<b class='flag-5'>检测</b>

    OpenCV4.8 CUDA编程代码教程

    OpenCV4支持通过GPU实现CUDA加速执行,实现对OpenCV图像处理程序的加速运行,当前支持加速的模块包括如下。
    的头像 发表于 12-05 09:56 593次阅读
    <b class='flag-5'>OpenCV</b>4.8 CUDA编程代码教程

    OpenCV对openEuler提供上游原生支持

    ),是一个多平台的开源计算机视觉库。它提供了丰富的功能,包括图像处理,特征检测,目标识别,机器学习等,在计算机视觉领域,OpenCV凭借其强大的功能、性能和广泛的应用场景,已经建立起绝对的领导
    的头像 发表于 11-20 09:14 544次阅读

    基于OpenVINO+OpenCV的OCR处理流程化实现

    预处理主要是基于OpenCV、场景文字检测与识别基于OpenVINO框架 + PaddleOCR模型完成。直接按图索骥即可得到最终结果。 OpenCV预处理主要是完成偏斜矫正、背景矫正等操作,然后使用场景文字
    的头像 发表于 11-07 11:21 508次阅读
    基于OpenVINO+<b class='flag-5'>OpenCV</b>的OCR处理流程化实现

    Android系统下OpenCV的人脸检测模块的设计

    电子发烧友网站提供《Android系统下OpenCV的人脸检测模块的设计.pdf》资料免费下载
    发表于 10-23 09:37 0次下载
    Android系统下<b class='flag-5'>OpenCV</b>的人脸<b class='flag-5'>检测</b>模块的设计

    openCV边缘检测原理是什么?

    openCV是通过什么原理来实现边缘检测
    发表于 10-10 06:21

    OpenCV 如何加载图片

    之前也写过一些 OpenCV 的文章,最近正好在考虑 写一个 OpenCV相关的工具,目前还是在开发过程中,边开发边更新。预计会持续一段时间。目前的想法是把 OpenCV 的 API 在这个工具上都
    的头像 发表于 10-09 15:01 525次阅读

    车辆燃油系统如何进行压力检测

    车辆进行燃油系统压力检测通常需要一些专用工具和基本的机械知识。以下是一般的步骤来进行燃油系统压力检测: 注意:在进行燃油系统压力检测之前,请确保您已经熟悉
    的头像 发表于 10-07 15:01 1187次阅读

    【幸狐 Core3566 模组试用体验】基于openCV的猫脸识别

    OpenCV中,目标检测使用的函数是cv2.CascadeClassifier.detectMultiScale(),它可以检测图像中所有的目标。其完整定义如下: def detectMultiScale
    发表于 09-24 23:50

    OpenCV中的BGR格式,在libyuv中对应的那个格式?OpenCV中的RGB格式呢?

    OpenCV中的BGR格式,在libyuv中对应的那个格式?OpenCV中的RGB格式呢?
    发表于 09-19 06:00

    利用OpenCV进行颜色检测

    关于利用OpenCV进行颜色分类,本文包含了HSV介绍及应用、cv2.inRange及应用、RGB与HSV通道的区别三个方面。
    的头像 发表于 08-18 10:32 967次阅读
    利用<b class='flag-5'>OpenCV</b>进行颜色<b class='flag-5'>检测</b>

    opencv_videoio_ffmpeg_64.dll缺失,无法在OpenVINO trade中配置OpenCV怎么处理?

    ] global C:\\jenkins\\workspace\\OpenCV\\OpenVINO\\2021.4\\build\\windows\\opencv\\modules\\videoio
    发表于 08-15 08:24

    python opencv运动检测代码分享

      本文实例为大家分享了 python opencv 运动检测的具体代码,供大家  参考,具体内容如下  # -*- coding:utf-8 -*-  __author__ = ‘kingking
    发表于 07-20 11:44 1次下载