基于Python的openCV实现车道线检测算法原理

车道线检测算法的设计与实现

一、问题定义

车道线检测,就是在汽车行驶时通过汽车前方的摄像头捕捉到地面的图像(视频),通过Opencv对图片(视频)进行一系列处理后,可以在图片(视频)中标注出车道线,然后以此作为汽车自动驾驶时的安全行驶范围。由此可见车道线检测是无人驾驶中最为重要且基础的一环。在无人车自动行驶的过程中,实时获取路面视频流,然后对视频进行处理,标注出可行驶的路线。

 

二、算法设计

关于车道线检测,本次实验只是对图片进行处理,因此省去了不少步骤,本次实验主要参考了优达学院的无人驾驶工程师课程,这一系列课程简述了如何将图片的车道线进行检测并标注出来,之后调用pymovie将视频中的每一个目标视频,分割为一帧一帧的图片,然后针对每一个图片进行车道线的识别,最终将每一帧再合成为一个输出视频,整个课程不止针对简单的车道线,还考虑了在阴影条件下,在车道线有弯道时,以及车道线并不完整有部分车道线消失时依旧能够完成车道线的检测。本次实验就是在学习并研究以上课程中完成(感觉就是免费学习了这个课程)。

    大体上整个识别的过程可以分为以下几个步骤:

  1. 加载图片,将其变为由RGB表示的数组
  2. 对图片进行灰度处理,并去除噪点
  3. 通过opencv自带函数实现边缘检测(sobel算子,canny算子,prewitt算子)
  4. 对检测后的图像裁剪出车道线
  5. 通过霍夫变换将车道线画出
  6. 将检测到车道线加载到原图像中

 

2.1数据预处理

首先加载原图片采取cv2.imread加载方式这里也可以采用 mpimg.read 的加载方式,但是跟前面相比颜色的排序由GBR变为RGB。之后应用时注意顺序的变化。

对于输入的图像,我们通过灰度处理将其从一个三通道的图像转换为单通道图像。具体过程就是RGB对应的不同权重的求和:

我们直接调用cvtColor()函数完成这个过程,之后我们就要消除这个图像部分噪点,这样就可以避免在接下来的边缘检测时,在车道线附近出现某个噪点,而使最终的检测结果与真实值相比出现较大误差。

常用的去噪方法有均值模糊、中值模糊和高斯模糊我们在这里使用的是用高斯模糊并使用5*5的矩阵作为核心来对图片进行卷积运算。

其中kernel size越大,对图片进行卷积运算的模板矩阵也就越大最后计算出来的结果也就越模糊,去掉的噪点也就越多。这样在之后的边缘检测中获得最终的图案越好,然而这对车道线检测时也会有少量的损失,但是这在之后的霍夫变换中可以对其进行弥补,但是如果车道线在边缘检测中损失过多,可能会影响霍夫变换最终生成的直线。

但目前先不考虑这些,在经过预处理之后,就可以通过高通滤波进行边缘检测了。

  • 22
    点赞
  • 237
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值