车道线检测是一个常见的问题,本文主要介绍如何简单有效的用python实现这个功能

主要思路

1 读取图像并选择感兴趣的区域ROI进行下一步处理
2 对ROI区域进行预处理包括灰度化,膨胀和腐蚀
3 对预处理后的图像进行边缘检测(Canny算子)
4 对边缘检测后度图像进行概率霍夫变化得到多条直线
5 对直线进行分组,根据斜率分成左线和右线
6 选择左右线各一条,之后scale直线是其延伸至边界

To do things:
1在连续图片的车道线检测中会有水平的直线,需要处理
2某几帧没有检测结果用之前的结果代替
3弯道车道线检测

结论:
对简单单调的环境效果不错
依赖参数的设置

**

效果展示

原始图片

输出结果


代码展示

#created by BOXIAO  27/09/2017
#all rights reserved
import os
import cv2
import sys
import numpy as np
import skimage.transform as st
import matplotlib.pyplot as plt
from skimage import feature #预处理图像膨胀和腐蚀(可选)
def preprocessimage(img):kernel=np.uint8(np.zeros((5,5)))for x in range(5):kernel[x,2]=1kernel[2,x]=1eroded=cv2.erode(img,kernel)dilated = cv2.dilate(img, kernel)result = cv2.absdiff(dilated, eroded)return result
#scale所得的车道线,使其充满屏幕
def scale_lines(chooses_lines):final_lines=[]for line in choose_lines:p0, p1 = linek = np.float32(((p0[1]-p1[1])*1.0)/(1.0*(p0[0]-p1[0])))b = np.float32(p1[1] - k*p1[0])y1=0x1=-b/kif k < 0:x2=0y2=belse:x2=640y2=640*k+bline=((x1,y1),(x2,y2))final_lines.append(line)return final_linesif __name__ == '__main__':input_dir=sys.argv[1]output_dir=sys.argv[2]data_dir='/home/b_xi/codes/lanedetection/mymethod'frames_list = os.listdir(input_dir)frames_list.sort()for f, frame in enumerate(frames_list):img = cv2.imread(os.path.join(data_dir,input_dir,frame))ROI=[330,480,0,640]ROI_img=img[ROI[0]:ROI[1],ROI[2]:ROI[3]]image = cv2.cvtColor(ROI_img,cv2.COLOR_BGR2GRAY)edges = feature.canny(image, sigma=2, low_threshold=2, high_threshold=25)all_lines = st.probabilistic_hough_line(edges, threshold=10, line_length=70,line_gap=0)#根据斜率将直线分为两组:左直线和右直线left_lines = []right_lines = []for line in all_lines:p0, p1 = linetheta = np.abs(np.arctan2((p0[0] - p1[0]), (p0[1] - p1[1])))if theta > 1:left_lines.append(line)else:right_lines.append(line)choose_lines = [left_lines[0], right_lines[0]]# scaling left and right lineslines=scale_lines(choose_lines)#绘图并且保存fig, (ax0,ax1,ax2,ax3) = plt.subplots(1, 4, figsize=(16, 6))plt.tight_layout()ax0.imshow(img)ax0.set_title('Input image')ax0.set_axis_off()ax1.imshow(edges,plt.cm.gray)ax1.set_title('Canny deges')ax1.set_axis_off()ax2.imshow(edges*0)for line in all_lines:p0, p1 = lineax2.plot((p0[0], p1[0]), (p0[1], p1[1]))row2, col2 = image.shapeax2.axis((0, col2, row2, 0))ax2.set_title('Probabilistic Hough')ax2.set_axis_off()ax3.imshow(image, plt.cm.gray)for line in lines:p0, p1 = lineax3.plot((p0[0], p1[0]), (p0[1], p1[1]),linewidth=10.0)ax3.set_title('Output image')ax3.set_axis_off()plt.savefig(os.path.join(data_dir,output_dir,frame))plt.show()

## 最后 ##
在学习代码的过程中不断度阅读他人的博客,给了我极大的帮助,希望之后自己也可以不断分享学习感悟,最后感谢开源。

Python初步实现车道线检测相关推荐

  1. Python实现道路车道线检测(附源码)

    车道线检测是自动驾驶汽车以及一般计算机视觉的关键组件.这个概念用于描述自动驾驶汽车的路径并避免进入另一条车道的风险. 在本文中,我们将构建一个机器学习项目来实时检测车道线. 我们将使用 OpenCV ...

  2. python+openCV (入门级)车道线检测 学习笔记

    文章目录 前言 一.openCV安装 二.尝试使用cv2中库函数 1.读取图片 2.图片显示 3.延时/暂停 4.保存图片 5.清楚所有窗口 三.Canny边缘检测 1.高斯滤波 2.图片转换 3.边 ...

  3. Python+OpenCV实现车道线检测代码部分

    实验时 使用的是python3.7+cv2,直接在Anaconda上面直接安装,代码在Jupyter上跑的,图片是老师给的(-.-) 经过各个滤波后,划定区域 : 最终合成的图像 : 最后实际上是先把 ...

  4. Opencv-Python处理车道线检测

    利用Opencv和Python结合完成车道线检测 1 前言 去年对Opencv系统学习了一段时间,后面没有继续更新博客,但自己也有继续学习啦,哈哈,最近做了一个小项目,利用图像处理算法解决车道线检测. ...

  5. 基于Python+OpenCV车道线检测(直道和弯道)

    基于Python+OpenCV车道线检测(直道和弯道) 基于Python+OpenCV车道线检测(直道和弯道)

  6. 车道线检测基础任务(Python实现)

    车道线检测基础任务(Python实现) 基础任务: 车道线检测 基础任务:实际公路的车道线检测. 任务内容: 1. 在所提供的公路图片上检测出车道线并标记: 2. 在所提供的公路视频上检测出车道线并标 ...

  7. python车道线检测

    车道线检测是一种利用计算机视觉技术来识别和跟踪道路上的车道线的方法,它对于自动驾驶和智能交通系统等领域有着重要的应用价值.车道线检测的基本步骤如下: 边缘检测:使用Canny算法对输入的图像进行边缘检 ...

  8. 基于python的车道线检测

    最近在开源社区下载了一份使用opencv在python环境中实现车道线检测的代码,研究了一下,终于有点儿看懂了,寻思着写下来,免得以后忘记了. 这个车道线检测项目原本是优达学城里无人驾驶课程中的第一个 ...

  9. python+opencv车道线检测(简易实现)

    python+opencv车道线检测(简易实现) 技术栈:python+opencv 实现思路: canny边缘检测获取图中的边缘信息: 霍夫变换寻找图中直线: 绘制梯形感兴趣区域获得车前范围: 得到 ...

最新文章

  1. 福利 | Python、深度学习、机器学习、TensorFlow 好书推荐
  2. ckeditor 在dwz里面使用
  3. 444牛X的日常口语
  4. C++对象模型7——类的成员函数、反汇编虚析构函数、RTTI、多态的开销
  5. Zend Studio 默认模板和输入代码提示时间的修改方式
  6. Mule与Servicemix比较
  7. BP神经网络预测实现
  8. Postman系列之基本操作及设置
  9. 机器学习入门——numpy与matplotlib的使用简介
  10. java eclipse 监视选择指定变量
  11. python制作词典软件_推荐一款非常好用的一键生成数据字典工具
  12. PS学习笔记(一):基础知识
  13. UML建模工具 Visual Paradigm敏捷开发教程(一):如何确立项目愿景
  14. 7月的尾巴,你是XXX
  15. 盐城北大青鸟东台基地学员生日会 | 美好的时光里,你我同在
  16. 如何看计算机cpu的好坏,怎么看电脑的配置(如何判断cpu的好坏)
  17. 关于数据库触发器(trigger)的简单使用操作
  18. 程序员求职之道(《程序员面试笔试宝典》)之自己的强项或是研究方向与中意的工作岗位不一致怎么办?
  19. 30K成功入职京东:拿到京东offer经验分享「面试经历+面试真题」
  20. 官网下载Tomcat步骤

热门文章

  1. 土木工程--钢筋下料软件(完)
  2. 调剂b区二本计算机,考研电子信息调剂究竟有多惨烈……调二本竟也要310分
  3. 腾霸微信会员管理系统,帮助商家有效进行会员管理
  4. 基于ICC.2的色彩管理系统
  5. 27家大数据企业入驻京玖大厦
  6. 获取秒级股票详细数据——Ajax-hook
  7. 2021主流CRM系统排行
  8. python 十进制数字转指定位数的二进制 八进制 十六进制 利用join 和字符串格式化
  9. 测试spring容器
  10. P2389 电脑班的裁员