c语言编写的车道线检测程序,opencv车道线检测的实现方法

本文详细介绍了使用C语言和OpenCV库进行车道线检测的实现过程,包括图像裁剪、二值化、形态学滤波、边缘检测以及直线检测等步骤。在光照良好和高速行驶条件下,程序能有效识别车道线,但在特定环境如隧道内或道路损坏时,识别效果受限。提出了动态参数调整以增强系统适应性的改进方案。
摘要由CSDN通过智能技术生成

车道线检测,需要完成以下功能:

图像裁剪:通过设定图像ROI区域,拷贝图像获得裁剪图像

反透视变换:用的是室外采集到的视频,没有对应的变换矩阵。所以建立二维坐标,通过四点映射的方法计算矩阵,进行反透视变化。后因ROI区域的设置易造成变换矩阵获取困难和插值得到的透视图效果不理想,故没应用

二值化:先变化为灰度图,然后设定阈值直接变成二值化图像。

形态学滤波:对二值化图像进行腐蚀,去除噪点,然后对图像进行膨胀,弥补对车道线的腐蚀。

边缘检测:canny变化、sobel变化和laplacian变化中选择了效果比较好的canny变化,三者在代码中均可以使用,canny变化效果稍微好一点。

直线检测:实现了两种方法 1>使用opencv库封装好的霍夫直线检测函数,在原图对应区域用红线描出车道线 2>自己写一种直线检测,在头文件中,遍历ROI区域进行特定角度范围的直线检测。两种方法均可在视频中体现,第一种方法运行效率较快。

按键控制:空格暂停,其余键退出,方便调试和截图。

实现的效果

23bf1c67e399d2132c3b71f460409ff3.png

在亮度良好道路条件良好的情况下,检测车前区域的车道线实现比较成功,排除掉高速护栏的影响,而且原图像还能完整体现。

c6b2aba4ab11de10f01b42d736d4c937.png

车子行驶在高速公路大型弯道上,可以在一定角度范围内认定车道线仍是直线,检测出为直线。

96b02cf0edd18c162c485fafa22a5417.png

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

d6ee3709758e01d793132080442de060.png

88bff157e2891ddbc6206d49c19e4d70.png

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

c5d63299d561715023e2f7a21327922d.png

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

结论

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

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

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

完整代码

方法一

main.cpp

#include

#include

#include

#include"mylinedetect.h"

#include

#include

using namespace std;

int main(){

//声明IplImage指针

IplImage* pFrame = NULL;

IplImage* pCutFrame = NULL;

IplImage* pCutFrImg = NULL;

//声明CvCapture指针

CvCapture* pCapture = NULL;

//声明CvMemStorage和CvSeg指针

CvMemStorage* storage = cvCreateMemStorage();

CvSeq* lines = NULL;

//生成视频的结构

VideoWriter writer("result.avi", CV_FOURCC('M', 'J', 'P', 'G'), 25.0, Size(856, 480));

//当前帧数

int nFrmNum =

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值