yolov5+车道线检测

news/2024/7/10 3:16:40 标签: 目标检测, 计算机视觉, 自动驾驶

        目标检测与车道线检测在自动驾驶以及车辆定位中起着重要的辅助作用,是环境感知中不可缺少的一个部分。基于深度学习的车道线检测方法近年来也在不断的提升,比如论文:Ultra Fast Deep Lane Detection with HybridAnchor Driven Ordinal Classification.该论文是提出了一种基于anchor的车道线检测方法,这种方法借鉴了目标检测的思想,预设定了anchor,比基于图像分割的车道线检测方法在速度上有很大的提升。到考虑到如果算法均采用深度学习方法,在最终算法落地的时候对于模型优化是比较高的,而且有些模型在参数和计算量上都比较大,因此本文采用深度学习的yolov5做为目标检测结合传统的图像处理方法做车道线检测

yolov5这部分不在详细展开,直接下载官方代码即可。重点是介绍车道线检测方法思路供大家学习。


主要步骤分四步:

1.颜色筛选

2.边缘检测

3.mask检测区域筛选

4.霍夫变换


yolov5+车道线检测

1.颜色筛选

        比如下面视频中,我们想先通过颜色筛选先对图像进行过滤,方法也很简单,就是通过设置阈值对RGB三通道先进行筛选。这个阈值也不是随便设置,教给大家一个方法。采用微信截图,然后把鼠标放到车道上面,记下RGB三通道的值即可【可以上下浮动调整,直到筛选出你较为满意的效果,注意opencv里的通道顺序是BGR】。过滤以后就如下所示。

2.边缘检测

        这里的边缘检测主要是检测车道线的边缘,采用的是Canny算子进行检测。在边缘检测之前需要先把图像转为灰度图,设置核的大小,一般设置为5,用高斯进行去噪处理后在采用Canny进行边缘检测。

def canny_edg_(img):
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 转为灰度图像
    kernel_size = 5
    blur_gray = cv2.GaussianBlur(gray, (kernel_size, kernel_size), 0) # 高斯滤波
    low_thres = 160
    high_thres = 240
    edg_img = cv2.Canny(blur_gray, low_thres, high_thres)
    return edg_img

边缘检测的效果图如下所示 ,可以看到这里已经将车道线检测出来了【当然这里还有其他边缘】。

3.mask检测区域筛选

        这一步是很重要的,我们可以分析一下步骤二中的图,在道路环境中不仅仅有车道线,还有山体的轮廓等等,那有什么办法可以进一步筛选吗?答案是有的,可以看到车道线基本是位于画面的三分之二左右的位置上,上面的部分是不需要检测,所以如果我们可以创建一个mask把需要检测的区域保留下来即可。mask图像如下所示,可以看到已经把车道区域筛选出来了【这个区域可以做更细微的调整,比如设置一个比例值,我这里只是做个演示】

4.霍夫变换        

        接下来是通过霍夫变换获取车道线的坐标进行绘制,可以直接用opencv中现有的函数即可,即cv2.HoughLinesP ,同时还可以计算出左右车道线坐标【通过霍夫空间映射到笛卡尔空间,这里的m表示斜率,c表示截距,那么我们可以斜率判断车道线是左还是右】,最后通过cv2.line进行绘制即可。

                # 求直线方程斜率判断左右车道
                m = (y2 - y1) / (x2 - x1)
                c = y1 - m * x1
                if m < 0:  # 左车道
                    left_line.append((m, c))
                elif m >= 0:  # 右车道
                    right_line.append((m, c))

效果图就是下面这样的。如果还想检测的区域更长一些,可以调整mask区域即可【但也会引入其他的噪声】 。


然后可以将以上车道线检测应用于目标检测中, 我这里是放到了yolov5中,大家也可以尝试放在其他的目标检测算法后,也可以放在图像分割中都是可以的。

【yolov5+车道线检测】 


 本文仅供研究学习使用,暂时不放源码的原因是由于以前碰到过一些不讲信誉的公司让我非常气愤【比如格灵深瞳】。大家有兴趣学习交流的可以私信或者留言都可以


http://www.niftyadmin.cn/n/26343.html

相关文章

电商物流云仓的原理是什么?

以云的速度和范围获得胜利  这是一个快速转型时期&#xff0c;封锁、就地避难订单和游览限制扰乱了美国经济的各个范畴&#xff0c;对供给链运营产生了严重影响。在如此动乱的时期&#xff0c;企业正越来越多地转向云优先战略&#xff0c;以使其供给链愈加矫捷和灵敏。  战…

【YOLOv7/YOLOv5系列改进NO.52】将YOLOv8中的C2f模块融入YOLOv5

文章目录 前言一、解决问题二、基本原理三、​添加方法四、总结前言 作为当前先进的深度学习目标检测算法YOLOv7,已经集合了大量的trick,但是还是有提高和改进的空间,针对具体应用场景下的检测难点,可以不同的改进方法。此后的系列文章,将重点对YOLOv7的如何改进进行详细…

< CSS小技巧:filter滤镜妙用>

文章目录&#x1f449; 前言&#x1f449; 简述&#x1f449; 基本语法及案例》语法简述》案例&#x1f449; 拓展1. drop-shadow 更加智能的阴影效果2. 网页置灰3. 元素强调、高亮4.节省空间&#xff0c;提高网页加载速度&#x1f449; 具体案例网页参考文献往期内容 &#x1…

C++/Qt 小知识记录2

工作中遇到的一些小问题&#xff0c;总结的小知识记录&#xff1a;C/Qt 小知识RGBA/ARGB转16进制颜色int与RGB互转int转Hex值VS2015代码粗略统计QTableWidget设置列宽设置整行选中Item设置可选中但不可编辑C std路径相关操作文件写出绝对路径转为相对路径字符替换打印出GBK的平…

快排【基础算法】

快排是我们给一组数据进行排序的常见算法&#xff0c;接下来我将介绍一下它的用法思路和模板。 目录 一、思路和步骤 二、模板 一、思路和步骤 先简单介绍一下步骤&#xff1a; 第一步&#xff1a;确定一个分界点x&#xff08;建议取中间数&#xff09; 第二步&#xff1a;…

Python学习笔记——列表

Python列表函数&方法函数&#xff1a;len(list)&#xff1a;列表元素个数max(list)&#xff1a;返回列表元素最大值min(list)&#xff1a;返回列表元素最小值list(seq)&#xff1a;将元组转换为列表方法list.append(obj)&#xff1a;在列表末尾添加新的对象list.count(obj)…

ECharts基本使用

文章目录Echarts概述Echarts初体验ECharts基础配置Echarts社区介绍Echarts-map使用Echarts概述 常见的数据可视化库&#xff1a; D3.js 目前 Web 端评价最高的 Javascript 可视化工具库(入手难)ECharts.js 百度出品的一个开源 Javascript 数据可视化库Highcharts.js 国外的前…

内存对齐(memory align)

0. 内存结构 我们平时所称的内存也叫随机访问存储器&#xff08;random-access memory&#xff09;也叫RAM。而RAM分为两类&#xff1a; 一类是静态RAM&#xff08;SRAM&#xff09;&#xff0c;这类SRAM用于前边介绍的CPU高速缓存L1Cache&#xff0c;L2Cache&#xff0c;L3C…