自动驾驶感知-车道线系列(一)——车道线基础流程实现
车道线基础流程实现
- 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)
总结
以上是一个简单的车道线入门级知识梳理,很多内容还有待细化,我会持续学习以上相关知识,不断细化内容。
自动驾驶感知-车道线系列(一)——车道线基础流程实现相关推荐
- 【camera】自动驾驶感知系统实现(车道线检测和拟合、目标检测与跟踪、道路可行驶区域分割、深度估计、图像视野到BEV空间映射、像平面到地平面映射)
自动驾驶感知系统实现(车道线检测和拟合.目标检测与跟踪.道路可行驶区域分割.深度估计.图像视野到BEV空间映射.像平面到地平面映射) 项目下载地址:项目下载地址 推理引擎下载地址:推理引擎下载地址 支 ...
- Apollo星火计划学习笔记——第六讲上自动驾驶感知基础(I)
文章目录 1. 感知的作用 2. 常见传感器 2.1 相机 2.1.1 相机的种类 2.1.2 相机的特点 2.2 激光雷达 2.2.1 激光雷达系统构成与方案 2.2.2 激光雷达光源 2.2.3 ...
- BEV感知,是下一代自动驾驶感知算法风向吗?
1 背景 在现代自动驾驶任务中,决策规划模块依赖于多个感知.预测任务模块以提供充足的环境信息,其中感知任务不仅需要检测场景中的动态物体,还需要识别道路边界.人行横道.车道线.路标等静态元素.而预测任务 ...
- 自动驾驶感知——环境感知的基本概念
文章目录 1. 智能汽车概述 1.1 汽车新四化 1.2 智能网联汽车 1.3 SAE J3016自动驾驶分级标准 2. 环境感知定义 2.1 智能网联汽车系统架构 2.2 环境感知定义及对象 3. ...
- 自动驾驶感知系统盘点
自动驾驶感知系统盘点 Perception(感知)系统是以多种传感器的数据与高精度地图的信息作为输入,经过一系列的计算及处理,对自动驾驶车的周围环境精确感知的系统. 它能够为下游模块提供丰富的信息,包 ...
- 深度学习在自动驾驶感知领域的应用
程序员转行学什么语言? https://edu.csdn.net/topic/ai30?utm_source=csdn_bw 本次直播课程是由深度学习资深研究者-杨阳博士从百度Apollo自动驾驶感知 ...
- 如何入门学习自动驾驶感知技术?
点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 本文授权转载自公众号:自动驾驶视觉感知工程师 一.前言 目前车企正在经历着前所未有的改革,包括前两天奥 ...
- 自动驾驶感知——自动驾驶地图
文章目录 1. 地图基础知识 1.1 地图的基本特性 1.2 地图的构成要素 1.3 地图的比例尺 2. 电子地图 2.1 电子地图的特点和优势 2.2 构建电子地图 2.3 存储和表达电子地图 2. ...
- 《自动驾驶感知算法实战专栏(源代码)》专栏概述
导言 自动驾驶太火?高薪?跃跃欲试,又仅存于想的阶段.动起来,只是看理论,却总也学不会?看不懂,又总没有进度?如果你也有这类问题,那你来看看这个专栏.以实际项目为导向,亲自动手实践,从简单的图像分类. ...
- 地平线:上帝视角与想象力——自动驾驶感知的新范式
导读 3月28日,在「地平线自动驾驶技术专场」上,地平线自动驾驶系统架构师刘景初博士围绕<上帝视角与想象力--自动驾驶感知的新范式 >这一主题进行了直播讲解. 本次课程主要分为以下4个部分 ...
最新文章
- 如何为回归问题选择最合适的机器学习方法?
- STL中heap算法(堆算法)
- 区块链BaaS云服务(39)时戳信息Bystack
- ECC椭圆曲线算法(2)初步介绍
- java string类型时间段 转换 date类型
- 如何使用_如何使用Excel播放音乐
- 一程序员反应职场怪现象
- 10米精度NPP净初级生产力数据/NDVI数据/植被类型数据/土地利用数据/降雨气温分布数据/太阳辐射分布数据
- chrome pdf viewer 参数
- MySQL数据库笔记6——约束Constraint
- 学计算机二级考试的软件,2020计算机二级考试宝典
- STM32串口通信编程
- FGFA(Flow-Guided Feature Aggregation for Video Object Detection)论文详读
- 双色F3.75LED点阵屏中保护电路74HC04的作用
- vnr光学识别怎么打开_小区安装家用防盗报警系统方案
- beyond compare java_文件内容比较工具---Text compare Beyond compare
- 一阶导数和二阶导数的意义
- 0~6岁儿童不同时期微量元素含量的结果分析
- vue img初始化时不显示图片错误图标
- 从泊松方程到泊松融合(Poisson Matting)