车道线基础流程实现

  • OpenCV的安装
  • 图片的读取,展示和保存
  • Canny边缘检测
  • ROI_Mask
  • 霍夫变换
  • 离群值过滤
  • 最小二乘拟合
  • 直线绘制
  • 视频流读写
  • 总结

最近开始接触车道线相关的工作,由于本人之前在这一块没有什么经验,所以找了一个基础版本用python做了一下实现,现在把简单的流程进行一下梳理,分享给大家!

OpenCV的安装

笔者是开始做车道线之后才真正把OpenCV用起来,这里从OpenCV的安装开始讲起:

pip install opencv-python

图片的读取,展示和保存

对于图片的操作,OpenCV有很多现成的函数可以用,非常方便,这也为我们的快速实现提供了条件。
这里把图片的读取,展示和保存的代码列在这里:

  • 导入OpenCV

    import cv2
    
  • 读取图片,第一个参数为读取的图片名称,第二个是读取的格式,这里是灰度图的格式
    img = cv2.imread('img.jpg', cv2.IMREAD_GRAYSCALE)
    
  • 展示图片,第一个参数为展示框的名称,第二个参数是要展示的图片
    cv2.show('image', img)
    
  • 注意:这里要展示的图片框会直接闪过,要保留图片框的话需要加以下代码:
    cv2.waitKey(1000)
    

    上面的参数1000为弹出框等待1000ms之后推出,如果要一直等待,可以改为0;如果要以其他速度播放图片流,则可以通过修改这个参数实现,比如:10即为10ms,也就是100fps的速度播放。

  • 图片保存,第一个参数为保存的文件名,第二个参数为要保存的图片
    cv2.imwrite('img_gray.jpg', img)
    

    注意:上面要保存的文件名后缀要是图片格式的扩展名,jpg为压缩格式,bmp为位图格式。

Canny边缘检测

  • 算法简介
  • 梯度->亮度变化速度->边缘

  • 上阈值和下阈值

    为了去除噪点,Canny检测设计了上阈值与下阈值,高于maxVal的检测点必保留,低于minVal的检测点必删除,在二值之间的如果和保留的检测点有连接的要保留,无连接的删除。
    代码如下:

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

ROI_Mask

这一部分,是在原有图片的基础上,设置一部分感兴趣区域。做这部分操作,一方面是为了滤除车道线之外的噪点区域,一方面为了降低计算量。
先用OpenCV的fillPoly函数给定一个区域(该函数给定四个角点,即可以将该区域用1覆盖)

import numpy as np
mask = np.zeros_like(edge_img)
mask = cv2.fillPoly(mask, np.array([[[0, 368], [240, 210], [300, 210], [640, 368]]]), color=255)
masked_edge_img = cv2.bitwise_and(edge_img, mask)

霍夫变换

lines = cv2.HoughLinesP(edge_imgm, 1, np.pi/180, 15, minLineLength=40, maxLineGap=20)

离群值过滤

经过霍夫变换处理得到的直线有很多,一条粗线可能变换成多条线。
这一步就是根据斜率,剔除与均值距离较大的线。

最小二乘拟合

这里用到了几个函数,先列在这里,后面再慢慢详细介绍:

np.ravel       // 将高维数组拉成一维
np.polyfit     // 多项式拟合
np.polyval     // 多项式求值

举个例子

poly = np.polyfit([0,3,6,9], [0,5,9,14], deg=1)

直线绘制

cv2.line(img, (10,10), (200,100), 255, 3)
left_line = least_squares_fit(left_lines)
right_line = least_squares_fit(right_lines)
img = cv2.imread('img.jpg', cv2.IMREAD_COLOR)
cv2.line(img, tuple(left_line[0]), tuple(left_line[1]), color=(0,255,255), thickness=5)
cv2.line(img, tuple(right_line [0]), tuple(right_line [1]), color=(0,255,255), thickness=5)

视频流读写

capture = cv2.VideoCapture('video.mp4')
// 也可以读取摄像头
// capture = cv2.VideoCapture(0)
while True:ret, frame = capture.read()frame = show_lane(frame)cv2.imshow('frame', frame)cv2.waitKey(10)

总结

以上是一个简单的车道线入门级知识梳理,很多内容还有待细化,我会持续学习以上相关知识,不断细化内容。

自动驾驶感知-车道线系列(一)——车道线基础流程实现相关推荐

  1. 【camera】自动驾驶感知系统实现(车道线检测和拟合、目标检测与跟踪、道路可行驶区域分割、深度估计、图像视野到BEV空间映射、像平面到地平面映射)

    自动驾驶感知系统实现(车道线检测和拟合.目标检测与跟踪.道路可行驶区域分割.深度估计.图像视野到BEV空间映射.像平面到地平面映射) 项目下载地址:项目下载地址 推理引擎下载地址:推理引擎下载地址 支 ...

  2. Apollo星火计划学习笔记——第六讲上自动驾驶感知基础(I)

    文章目录 1. 感知的作用 2. 常见传感器 2.1 相机 2.1.1 相机的种类 2.1.2 相机的特点 2.2 激光雷达 2.2.1 激光雷达系统构成与方案 2.2.2 激光雷达光源 2.2.3 ...

  3. BEV感知,是下一代自动驾驶感知算法风向吗?

    1 背景 在现代自动驾驶任务中,决策规划模块依赖于多个感知.预测任务模块以提供充足的环境信息,其中感知任务不仅需要检测场景中的动态物体,还需要识别道路边界.人行横道.车道线.路标等静态元素.而预测任务 ...

  4. 自动驾驶感知——环境感知的基本概念

    文章目录 1. 智能汽车概述 1.1 汽车新四化 1.2 智能网联汽车 1.3 SAE J3016自动驾驶分级标准 2. 环境感知定义 2.1 智能网联汽车系统架构 2.2 环境感知定义及对象 3. ...

  5. 自动驾驶感知系统盘点

    自动驾驶感知系统盘点 Perception(感知)系统是以多种传感器的数据与高精度地图的信息作为输入,经过一系列的计算及处理,对自动驾驶车的周围环境精确感知的系统. 它能够为下游模块提供丰富的信息,包 ...

  6. 深度学习在自动驾驶感知领域的应用

    程序员转行学什么语言? https://edu.csdn.net/topic/ai30?utm_source=csdn_bw 本次直播课程是由深度学习资深研究者-杨阳博士从百度Apollo自动驾驶感知 ...

  7. 如何入门学习自动驾驶感知技术?

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 本文授权转载自公众号:自动驾驶视觉感知工程师 一.前言 目前车企正在经历着前所未有的改革,包括前两天奥 ...

  8. 自动驾驶感知——自动驾驶地图

    文章目录 1. 地图基础知识 1.1 地图的基本特性 1.2 地图的构成要素 1.3 地图的比例尺 2. 电子地图 2.1 电子地图的特点和优势 2.2 构建电子地图 2.3 存储和表达电子地图 2. ...

  9. 《自动驾驶感知算法实战专栏(源代码)》专栏概述

    导言 自动驾驶太火?高薪?跃跃欲试,又仅存于想的阶段.动起来,只是看理论,却总也学不会?看不懂,又总没有进度?如果你也有这类问题,那你来看看这个专栏.以实际项目为导向,亲自动手实践,从简单的图像分类. ...

  10. 地平线:上帝视角与想象力——自动驾驶感知的新范式

    导读 3月28日,在「地平线自动驾驶技术专场」上,地平线自动驾驶系统架构师刘景初博士围绕<上帝视角与想象力--自动驾驶感知的新范式 >这一主题进行了直播讲解. 本次课程主要分为以下4个部分 ...

最新文章

  1. 如何为回归问题选择最合适的机器学习方法?
  2. STL中heap算法(堆算法)
  3. 区块链BaaS云服务(39)时戳信息Bystack
  4. ECC椭圆曲线算法(2)初步介绍
  5. java string类型时间段 转换 date类型
  6. 如何使用_如何使用Excel播放音乐
  7. 一程序员反应职场怪现象
  8. 10米精度NPP净初级生产力数据/NDVI数据/植被类型数据/土地利用数据/降雨气温分布数据/太阳辐射分布数据
  9. chrome pdf viewer 参数
  10. MySQL数据库笔记6——约束Constraint
  11. 学计算机二级考试的软件,2020计算机二级考试宝典
  12. STM32串口通信编程
  13. FGFA(Flow-Guided Feature Aggregation for Video Object Detection)论文详读
  14. 双色F3.75LED点阵屏中保护电路74HC04的作用
  15. vnr光学识别怎么打开_小区安装家用防盗报警系统方案
  16. beyond compare java_文件内容比较工具---Text compare Beyond compare
  17. 一阶导数和二阶导数的意义
  18. 0~6岁儿童不同时期微量元素含量的结果分析
  19. vue img初始化时不显示图片错误图标
  20. 从泊松方程到泊松融合(Poisson Matting)

热门文章

  1. bzoj 1606 [Usaco2008 Dec]Hay For Sale 购买干草(01背包)
  2. python后台架构Django教程——视图views渲染
  3. rand(m,n) 续行
  4. 汇编画图题:存储器扩展(重要)
  5. Jmeter性能测试实战教程系列-搭建分布式性能测试环境(五)
  6. Java基础之泛型的使用
  7. fstab损坏无法开机的修复
  8. 解决点击锚点置顶内容被导航遮住
  9. FJNU 1196 汪老司机(DP or 建图+最短路)
  10. HDU——1257最少拦截系统(贪心)