opencv车道线检测

来源:互联网 发布:java程序结构面试题 编辑:程序博客网 时间:2024/04/27 17:16

完成的功能

  1. 图像裁剪:通过设定图像ROI区域,拷贝图像获得裁剪图像
  2. 反透视变换:用的是老师给的视频,没有对应的变换矩阵。所以建立二维坐标,通过四点映射的方法计算矩阵,进行反透视变化。后因ROI区域的设置易造成变换矩阵获取困难和插值像素得到的透视图效果不理想,故没应用。
  3. 二值化:先变化为灰度图,然后设定阈值直接变成二值化图像。
  4. 形态学滤波:对二值化图像进行腐蚀,去除噪点;然后对图像进行膨胀,弥补对车道线的腐蚀。
  5. 边缘检测:canny变化、sobel变化和laplacian变化中选择了效果比较好的canny变化,三者在代码中均可用,canny变化效果稍微好一点。
  6. 直线检测:实现了两种方法①使用opencv库封装好的霍夫直线检测函数,在原图对应区域用红线描出车道线②自己写了一种直线检测,在头文件中,遍历ROI区域进行特定角度范围的直线检测。 两种方法均可在视频中体现,第一种方法运行效率较快。
  7. 按键控制:空格暂停,其余键退出,方便调试和截图。

实现的效果

在亮度良好道路条件良好的情况下,检测车前区域的车道线实现比较成功,排除掉高速护栏的影响,而且原图像还能完整体现。
车子行驶在高速公路大型弯道上,可以在一定角度范围内认定车道线仍是直线,检测出为直线。

车子切换过程中只有一根车道线被识别,但是稳定回变换车道后,实现效果良好。减速线为黄色,二值化是也被过滤,没造成影响。


刚进入隧道时,摄像机光源基本处于高光状态,拍摄亮度基本不变,二值化图像时情况良好,噪声比较多但是没产生多大线状影响;当摄像头自动调节亮度,图像亮度变低,二值化时同一阈值把车道线给过滤掉,造成无法识别车道线的现象。

在道路损坏的情况下,由于阈值一定,基本上检测不出车道线。

结论

实现的功能:实现了车道线检测的基本功能,反透视变换矩阵实现了但效果不太理想,使用自己写的直线检测部分,车道线识别抗干扰能力较强。

缺点:整个识别系统都是固定的参数,只能在特定的环境产生良好的效果。

改进空间:提取全部关键参数,每次对ROI图像进行快速扫描更新参数,否则使用默认参数。例如,可以选择每次5间隔取点,以像素最高点的85%作为该次二值化的阈值。从而做到动态车道线识别。


0 0
原创粉丝点击