无人驾驶的话题日趋起热,而车道线检测对于无人驾驶的路径规划来讲特别重要。要遵守交通规则,首先的要求便是对车道线检测,而且通过检测车道线可以进一步的检测地面指示标志、进行前碰撞预警策略设计等。

早早就对OpenCV感兴趣,但迟迟未去实践,现在我们就一起看看如何基于OpenCV进行检测吧!

步骤:

1、Canny边缘检测算法的实现

2、OPENCV ROI(感兴趣区域替换)

3、霍夫变换

4、离群值过滤

5、最小二乘拟合

6、直线绘制与整合

1、canny边缘检测算法

Opencv中的几种边缘检测算法_人工智能_k-CSDN博客​blog.csdn.net

首先,Canny 边缘检测是一种非常流行的边缘检测算法。忘记讲了,前面需要将图片灰度化,这样使得图片更好处理。

原图:

灰度之后:

img=cv2.imread('img.jpg',cv2.IMREAD_GRAYSCALE)

接着进行边缘检测:

edge_img=cv2.Canny(img,100,150)

Canny边缘检测算法:

step1:用高斯滤波器平滑图象;

step2:用一阶偏导的有限差分来计算梯度的幅值和方向;

step3:对梯度幅值进行非极大值抑制;

step4:用双阈值算法检测和连接边缘。

Canny(名称,下阈值,上阈值)

主要利用梯度来看是否为边缘,上阈值以上的保留,下阈值以下的消去,中间的若与上阈值相连的则可留下,这样则可消去大量噪点。

2、roi去除背景

opencv ROI(感兴趣区域替换)​www.cnblogs.com

首先,要考虑原图以什么形式保存,这里采用的是利用掩码,产生一块对应的画布,进行替代。

mask=np.zeros_like(edge_img)
mask=cv2.fillPoly(mask,np.array([[[20,488],[700,100],[130,200],[120,200]]]),color=255)
masked_edge_img=cv2.bitwise_and(edge_img,mask)

这里则需要确定画布的四个点的位置,color=255为黑色。

3、霍夫变换

霍夫变换​www.cnblogs.com

在直角坐标系中,我们可以通过绘制 y 对 x 的图像来表示 y=mx+b。但在霍夫空间中,我们也可以通过绘制 b 对 m 的图像将这条线表示为一个点,即用极坐标方程。

例如,直线方程 y=2x+1 在霍夫空间中可能是用 (2, 1) 表示的。

例如,对极坐标系中的点 (8, 6)、(4, 9) 和 (12, 3),我们在霍夫空间中绘制出的相应图像如下:

在霍夫空间中相交的曲线越多,意味着用交点表示的线对应的点越多。如此,我们便可在霍夫空间中定义了交点的最小阈值,以便检测车道线,消去无用的线。如果交点数量超过了定义的阈值,我们就确定一条对应参数 θ 和 r 的线。

left_lines=[line for line in lines if calculate_slope(line)>0]
right_lines=[line for line in lines if calculate_slope(line)<0]
def reject_abnormal_lines(lines,threshold):slopes=[calculate_slope(line) for line in lines]while len(lines)>0:mean=np.mean(slopes)diff=[abs(s-mean) for s in slopes]idx=np.argmax(diff)if diff[idx]>threshold:slopes.pop(idx)lines.pop(idx)else:breakreturn lines
reject_abnormal_lines(left_lines,threshold=0.002)

通过以上三步,我们便可初步将车道线的位置确定下来。欢迎大家一起来尝试!

opencv 边缘平滑_基于OpenCV的车道检测实现(一)相关推荐

  1. c++opencv汉字分割_基于OpenCV 的车牌识别

    车牌识别是一种图像处理技术,用于识别不同车辆.这项技术被广泛用于各种安全检测中.现在让我一起基于OpenCV编写Python代码来完成这一任务. 车牌识别的相关步骤 1.车牌检测:第一步是从汽车上检测 ...

  2. java opencv bp网_基于Opencv自带BP网络的车标简易识别

    记得把这几点描述好咯:代码实现过程 + 项目文件结构截图 + 演示效果 1.准备工作 1.1 训练集和测试集准备 先将数据集手动划分成训练集和测试集,并分好类,比如第一类就放在文件夹名为0的文件夹下, ...

  3. opencv 轮廓放大_基于openCV,PIL的深色多背景复杂验证码图像转灰度二值化,并去噪降噪处理分析...

    title: [python]基于openCV,PIL的深色多背景复杂验证码图像转灰度二值化,并去噪降噪处理分析 type: categories copyright: true categories ...

  4. opencv python考勤_基于opencv和dlib人脸识别的员工考勤系统

    已打包生成可执行文件exe,可直接下载运行,exe文件及代码均已上传到我的github,点击传送门,打包的具体过程及教程可见pyinstaller简明教程 WorkAttendanceSystem 一 ...

  5. opencv 图片边缘渐变_基于OpenCV的图像卡通化

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本期将创建一个类似于Adobe Lightroom的Web应用程序 ...

  6. opencv 图片叠加_基于OpenCV的红绿灯识别代码解析

    一堆废话 红绿灯分为导向灯和圆形灯.一般圆形灯在路口只有一盏灯,红灯亮时禁止直行和左转,可以右转弯.导向灯市带有箭头的,可以有两个或三个,分别指示不同方向的行车和停车.按指示的灯即可,没有右转向导向灯 ...

  7. opencv 处理黑夜_基于 opencv图像去噪

    1. 实验步骤:先为灰度图像添加高斯噪声.胡椒噪声.盐噪声和椒盐噪声,再分别利用算术均值滤波器.几何均值滤波器.谐波和逆谐波均值滤波器进行图像去噪.模板大小为5*5. 核心代码如下: 添加各类噪声: ...

  8. 检测噪声大小的c语言程序,单片机课程设计(论文)_基于AT89C51的噪音检测自适应系统设计.doc...

    单片机课程设计(论文)_基于AT89C51的噪音检测自适应系统设计 摘 要 本文以AT89S52 单片机为控制核心,通过播音判断电路寻找广播间歇时段,实时采集噪声环境内的噪音信 号,根据A/ D 转换 ...

  9. opencv 梯度幅值_基于OpenCV的图像梯度与边缘检测!

    严格的说,梯度计算需要求导数.但是图像梯度的计算,是通过计算像素值的差得到梯度的近似值.图像梯度表示的是图像变化的速度,反映了图像的边缘信息. 边缘是像素值快速变化的地方.所以对于图像的边缘部分,其灰 ...

最新文章

  1. 找到二叉树中的最大搜索子树
  2. C语言及程序设计初步例程-33 三种循环语句
  3. OpenGL tessmodes细分模式的实例
  4. 《微软开源跨平台移动开发实践》团购通知
  5. stm32l0的停止模式怎么唤醒_Mac外接显示器的显示模式怎么设置
  6. 实验四Java_《Java实验四》
  7. Synergy,一个软件团队质量改进之路之一 --- 规划
  8. 谱图理论-拉普拉斯矩阵理解
  9. Zabbix安装记录
  10. 分享10个值得每天一看的精品网站,可以让你全方面得到提升,每一个都会让你大开眼界。
  11. 魔兽怀旧服服务器位置,魔兽世界怀旧服PDD在哪个服务器 魔兽世界怀旧服pdd去哪个区...
  12. [英语歌曲]老鹰之歌:If I Could (El Condor Pasa)
  13. css3边框背景border-image
  14. python累乘怎么写_python实现累乘multi函数(函数参数不限)
  15. 音乐 组件 (音频, 视频)
  16. 在Linux系统中访问虚拟机的数据库和访问Windows(本机)下的数据库:
  17. 手机开热点显示互联网无服务器,win10热点无互联网连接的具体解决办法【图文】...
  18. 波音飞机计算机论文,飞机制造毕业论文范文.doc
  19. 删除内置不卡米教程_“异形钻”也很美,想来点不一样的?
  20. linux服务器安装vncserve过程记录

热门文章

  1. 在XML里的XSD和DTD以及standalone的使用
  2. Qt5:渐变效果的实现
  3. linux的常用操作——gcc
  4. druid seata 配置_架构设计 | 基于Seata中间件,微服务模式下事务管理
  5. python 首次登陆outlook 脚本_记Python“用户环境”的一次完美应用
  6. C++vector的reserve和resize比原来的容量小
  7. QT学习笔记(七):定时器事件的3种常用使用方式
  8. JavaSE——面向对象高级(继承、final关键字、抽象类与接口、多态、Object类、内部类、包装类、可变参数)
  9. c++中求前n项和(这代码不得不让我佩服)
  10. pyspider 安装 和 快速开始