![](https://img-blog.csdnimg.cn/50979551fcda4c02b0ea4879a7897353.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
基于计算机视觉的车道线检测Python实现
文章平均质量分 72
基于计算机视觉的车道线检测Python实现!完结
布尔大学士
工学博士在读,主要从事智能制造、工业精密检测、智能化设备研发等方向研究,已发表二区Top文章一篇、国家级竞赛二等奖一项、已授权软件著作权两项、已发表中文期刊两篇,先后参与国家自然科学基金面上项目、省重点研发计划等课题。
展开
-
智慧交通day00-项目简介
汽车的日益普及在给人们带来极大便利的同时,也导致了拥堵的交通路况,以及更为频发的交通事故。智能交通技术已成为推动现代技术交通技术发展的重要力量,智能交通不仅能够提供实时的交通路况信息,帮助交通管理者规划管理策略,而且还能优化出行者的出行策略。还可以减轻交通道路的堵塞情况,降低交通事故的发生概率,提高道路运行的安全系数。本项目分两个模块: 一个是基于视频的车辆跟踪及流量统计,是一个可跟踪路面实时车辆通行状况,并逐帧记录不同行车道车流量数目的深度学习项目,在视频中可看出每个车辆的连续帧路径,该项目可拓原创 2021-11-10 19:34:36 · 8723 阅读 · 5 评论 -
智慧交通day01-算法库01:numba
1 numba介绍numba是一个用于编译Python数组和数值计算函数的编译器,这个编译器能够大幅提高直接使用Python编写的函数的运算速度。numba使用LLVM编译器架构将纯Python代码生成优化过的机器码,通过一些添加简单的注解,将面向数组和使用大量数学的python代码优化到与c,c++和Fortran类似的性能,而无需改变Python的解释器。numba的编译方式如下图所示:为什么选择numba?选择Numbade 原因很简单,不需要为了获得一些的加速来改变代码,我.原创 2021-11-10 19:42:43 · 5648 阅读 · 0 评论 -
智慧交通day01-算法库02:imutils
1.imutils功能简介imutils是在OPenCV基础上的一个封装,达到更为简结的调用OPenCV接口的目的,它可以轻松的实现图像的平移,旋转,缩放,骨架化等一系列的操作。安装方法:pip install imutils在安装前应确认已安装numpy,scipy,matplotlib和opencv。2.imutils的使用方法2.1 图像平移OpenCV中也提供了图像平移的实现,要先计算平移矩阵,然后利用仿射变换实现平移,在imutils中可直接进行图像的平移。t原创 2021-11-10 20:11:16 · 6001 阅读 · 0 评论 -
智慧交通day01-算法库03:cv.dnn
1.DNN模块1.1. 模块简介OpenCV中的深度学习模块(DNN)只提供了推理功能,不涉及模型的训练,支持多种深度学习框架,比如TensorFlow,Caffe,Torch和Darknet。OpenCV那为什么要实现深度学习模块? 轻量型。DNN模块只实现了推理功能,代码量及编译运行开销远小于其他深度学习模型框架。 使用方便。DNN模块提供了内建的CPU和GPU加速,无需依赖第三方库,若项目中之前使用了OpenCV,那么通过DNN模块可以很方便的为原项目添加深度学习.原创 2021-11-10 21:20:41 · 2541 阅读 · 0 评论 -
智慧交通day03-车道线检测实现01:车道线检测概述
项目简介汽车的日益普及在给人们带来极大便利的同时,也导致了拥堵的交通路况,以及更为频发的交通事故。而自动驾驶技术的出现可以有效的缓解了此类问题,减少交通事故,提升出行效率。国内外检测车道线的方法主要有两类:一类是基于模型的检测方法,还有一类是基于特征的检测方法。基于模型的检测方法是将车道赋予一种合适的数学模型,并基于该模型对车道线进行拟合,原理就是在结构化的道路上根据车道线的几何特征为车道线匹配合适的曲线模型,在采用最小二乘法,Hough变换等方法对车道线进行拟合。常用的数学模型有直线型、抛物线原创 2021-11-18 18:20:46 · 2844 阅读 · 0 评论 -
智慧交通day03-车道线检测实现02-1:相机校正
1. 相机标定的意义我们所处的世界是三维的,而照片是二维的,我们可以把相机认为是一个函数,输入量是一个场景,输出量是一幅灰度图。这个从三维到二维的过程的函数是不可逆的。相机标定的一个目的是要找一个合适的数学模型,求出这个模型的参数,能够近似从三维到二维的过程,使这个三维到二维的过程的函数找到反函数。这个逼近的过程就是相机标定,我们用简单的数学模型来表达复杂的成像过程。由此可知,相机标定的一个目的就是建立像素坐标系和世界坐标系之间的关系。原理是根据摄像机的模型,由已..原创 2021-11-18 18:32:54 · 3407 阅读 · 0 评论 -
智慧交通day03-车道线检测实现02-2:张氏标定法+双目标定
6.张氏标定法张氏标定法是张正友博士在1999年发表在国际顶级会议ICCV上的论文《Flexible Camera Calibration By Viewing a Plane From Unknown Orientations》中,提出的一种利用平面棋盘格进行相机标定的实用方法。该方法介于传统标定法和自标定法之间,既克服了传统标定法需要的高精度三维标定物的缺点,又解决了自标定法鲁棒性差的难题。标定过程不需要特殊的标定物,只需使用一张打印出来的棋盘格,并从不同方向拍摄几组图片即可,不仅实用灵原创 2021-11-18 19:06:48 · 2979 阅读 · 0 评论 -
智慧交通day03-车道线检测实现03:相机校正和图像校正的实现
1.相机标定根据张正友校正算法,利用棋盘格数据校正对车载相机进行校正,计算其内参矩阵,外参矩阵和畸变系数。标定的流程是:准备棋盘格数据,即用于标定的图片 对每一张图片提取角点信息 在棋盘上绘制提取到的角点(非必须,只是为了显示结果) 利用提取的角点对相机进行标定 获取相机的参数信息1.1. 标定的图片标定的图片需要使用棋盘格数据在不同位置、不同角度、不同姿态下拍摄的图片,最少需要3张,当然多多益善,通常是10-20张。该项目中我们使用了20张图片,如下图所示:把这.原创 2021-11-19 17:53:30 · 2526 阅读 · 0 评论 -
智慧交通day03-车道线检测实现04:车道线提取原理+代码实现+效果图
我们基于图像的梯度和颜色特征,定位车道线的位置。在这里选用Sobel边缘提取算法,Sobel相比于Canny的优秀之处在于,它可以选择横向或纵向的边缘进行提取。从车道的拍摄图像可以看出,我们关心的正是车道线在横向上的边缘突变。OpenCV提供的cv2.Sobel()函数,将进行边缘提取后的图像做二进制图的转化,即提取到边缘的像素点显示为白色(值为1),未提取到边缘的像素点显示为黑色(值为0)。由于只使用边缘检测,在有树木阴影覆盖的区域时,虽然能提取出车道线的大致轮廓,但会同时引入的噪声,给后续处理带来麻原创 2021-11-20 15:15:04 · 5511 阅读 · 1 评论 -
智慧交通day03-车道线检测实现05:透视变换+代码实现
为了方便后续的直方图滑窗对车道线进行准确的定位,我们在这里利用透视变换将图像转换成俯视图,也可将俯视图恢复成原有的图像,代码如下:计算透视变换所需的参数矩阵:def cal_perspective_params(img, points): offset_x = 330 offset_y = 0 img_size = (img.shape[1], img.shape[0]) src = np.float32(points) # 俯视图中四点的位置 ds原创 2021-11-20 16:21:37 · 8155 阅读 · 5 评论 -
智慧交通day03-车道线检测实现06:车道线定位及拟合+代码实现
学习目标了解直方图确定车道线位置的思想我们根据前面检测出的车道线信息,利用直方图和滑动窗口的方法,精确定位车道线,并进行拟合。1. 定位思想下图是我们检测到的车道线结果:沿x轴方向统计每一列中白色像素点的个数,横坐标是图像的列数,纵坐标表示每列中白色点的数量,那么这幅图就是“直方图”,如下图所示:对比上述两图,可以发现直方图左半边最大值对应的列数,即为左车道线所在的位置,直方图右半边最大值对应的列数,是右车道线所在的位置。确定左右车道线的大致位置后,使用..原创 2021-11-21 12:44:35 · 6458 阅读 · 3 评论 -
智慧交通day03-车道线检测实现07:车道曲率和中心点偏离距离计算+代码实现
学习目标知道车道曲率计算的方法 知道计算中心点偏离距离的计算1.曲率的介绍曲线的曲率就是针对曲线上某个点的切线方向角对弧长的转动率,通过微分来定义,表明曲线偏离直线的程度。数学上表明曲线在某一点的弯曲程度的数值。曲率越大,表示曲线的弯曲程度越大。曲率的倒数就是曲率半径。1.1.圆的曲率下面有三个球体,网球、篮球、地球,半径越小的越容易看出是圆的,所以随着半径的增加,圆的程度就越来越弱了。定义球体或者圆的“圆”的程度,就是 曲率 ,计算方法为:其中rr为球体或者圆.原创 2021-11-21 13:41:13 · 5659 阅读 · 1 评论 -
智慧交通day03-车道线检测实现08: 在离线视频(非实时)中检测车道线+代码实现
学习目标了解在视频中检测车道线的方法在前面几节中一步步完成摄像机标定、图像畸变校正、透视变换、提取车道线、检测车道线、计算曲率和偏离距离后,在图像上实现了复杂环境下的车道线检测算法。现在我们将视频转化为图片,然后一帧帧地对视频数据进行处理,然后将车道线检测结果存为另一段视频,代码如下:首先将前面的方法进行汇总:def process_image(img): # 1.图像去畸变 undistort_img = img_undistort(img, mtx, dist)原创 2021-11-21 15:00:32 · 4200 阅读 · 1 评论 -
智慧交通day03-车道线检测实现09:车道线检测代码汇总(Python3.8)
import cv2import numpy as npimport matplotlib.pyplot as plt#遍历文件夹import globfrom moviepy.editor import VideoFileClip"""参数设置"""nx = 9ny = 6#获取棋盘格数据file_paths = glob.glob("./camera_cal/calibration*.jpg")# # 绘制对比图# def plot_contrast_image(origi.原创 2021-11-21 15:01:48 · 18234 阅读 · 2 评论