车道线识别有两种方法:

  • 基于Opencv的传统视觉车道线识别方案
  • 基于深度学习的车道线识别方案

本文将介绍基于Opencv的传统视觉车道线识别方案。

传统的车道线识别解决方案流程图如下:

代码实现如下所示,具体描述 @ 陈光 博主以及 @开水果摊能卖你生瓜蛋已经描述的很清晰了,请直接查看链接

import cv2 as cv
import numpy as npdef region_of_interest(img, vertices):mask = np.zeros_like(img)if len(img.shape) > 2:channel_count = img.shape[2]ignore_mask_color = (255,)else:ignore_mask_color = 255cv.fillPoly(mask, [vertices], ignore_mask_color)masked_img = cv.bitwise_and(img, mask)return masked_imgdef calc_slope(line):x1, y1, x2, y2 = line[0]return (y2-y1)/(x2-x1)def line_selection(lines, threshold):slopes = [calc_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:break# return linesdef least_squres_fit(lines):x_coords = np.ravel([[line[0][0], line[0][2]] for line in lines])y_coords = np.ravel([[line[0][1], line[0][3]] for line in lines])poly = np.polyfit(x_coords, y_coords, deg=1)point_min = (np.min(x_coords), np.polyval(poly, np.min(x_coords)))point_max = (np.max(x_coords), np.polyval(poly, np.max(x_coords)))return np.array([point_min, point_max], dtype=np.int)if __name__ == '__main__':img_path = r'C:\Users\HP\Pictures\lane.png'img = cv.imread(img_path, cv.IMREAD_COLOR)gray = cv.cvtColor(img, cv.COLOR_RGB2GRAY)low_threshold = 150high_threshold = 300canny_img = cv.Canny(gray, low_threshold, high_threshold)# cut interested imgleft_bottom = [0, canny_img.shape[0]]right_bottom = [canny_img.shape[1]-60, canny_img.shape[0]]apex = [canny_img.shape[1]/2, 120]vertices = np.array([left_bottom, right_bottom, apex], np.int32)roi_img = region_of_interest(canny_img, vertices)# hough lines operationlines = cv.HoughLinesP(roi_img, 1, theta=np.pi/180, threshold=15,  minLineLength=40, maxLineGap=20)# classify the line by slopeleft_lines = [line for line in lines if calc_slope(line) > 0]right_lines = [line for line in lines if calc_slope(line) < 0]# use threshold to modify the lines to select lines.print("before operation: {}".format(len(left_lines)))line_selection(left_lines, threshold=0.1)line_selection(right_lines, threshold=0.1)print("after operation: {}".format(len(left_lines)))left_line = least_squres_fit(left_lines)right_line = least_squres_fit(right_lines)cv.line(img, tuple(left_line[0]), tuple(left_line[1]), color=[255, 0, 0], thickness=6)cv.line(img, tuple(right_line[0]), tuple(right_line[1]), color=[255, 0, 0], thickness=6)cv.imshow('gray', img)cv.waitKey(0)

最终展示效果如图:

参考链接:

无人驾驶技术入门(十四)| 初识图像之初级车道线检测 - 知乎

车道线检测 _ 搜索结果_哔哩哔哩_Bilibili

Opencv(四):图像边缘检测_林小川的博客-CSDN博客

自动驾驶入门(十二):基于Opencv的车道线识别相关推荐

  1. 基于opencv的车道线识别(python)(极易实现)

    简易车道线识别方法 文章目录 简易车道线识别方法 1.先上效果图 1.1原图: 1.2结果图 2.源代码 3.阈值脚本 4.谈谈优缺点 优点: 缺点: 1.先上效果图 1.1原图: 1.2结果图 2. ...

  2. 基于视觉的车道线识别技术在智能车导航中的应用研究

    密级:公开 摘  要 摘  要 室外移动机器人的研究是机器人研究领域的重要分支,同时也是备受关注的热点领域.面向高速公路等结构化道路的室外移动机器人研究已成为现阶段民用交通运输领域移动机器人研究的主流 ...

  3. 基于OpenCV 的车道线检测方法

    车道线检测是图像处理运用到无人驾驶的一项技术,目前也过渡到了部分汽车上,高速公路的自动车道保持就是一个应用. 最近研究了两个基于opencv的车道检的代码,先放链接: A.Udacity车道线检测代码 ...

  4. 基于MATLAB的车道线识别、自动驾驶识别

    使用单目相机的视觉感知 这个例子展示了如何构建一个能够进行车道边界和车辆检测的单眼摄像机传感器仿真.该传感器将在车辆坐标系中报告这些检测结果.在本例中,您将了解自动驾驶工具箱™使用的坐标系统,以及设计 ...

  5. 睡眠音频分割及识别问题(十二)--基于IOS的YAMNet音频识别(总结)

    1 结构体 此部分定义了两个结构体用于存储音频信息: AudioFragment:用于存储单个音频片段(0.975s, 16000Hz)的标签评分信息: AudioInfo:用于存储整个音频信息,包含 ...

  6. 【OpenCV入门教程之十二】OpenCV边缘检测:Canny算子,Sobel算子,Laplace算子,Scharr滤波器合辑

    本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接: http://blog.csdn.net/poem_qianmo/article/details/25560901 作者:毛星云(浅墨) ...

  7. Mobileye 自动驾驶策略(二)

    Mobileye 自动驾驶策略(二) 与多方都成功进行了合作,其中比较大型的合作包括法雷奥.百度和中国 ITS. 法雷奥是最近的的 Tier 1 合作伙伴,法雷奥和 Mobileye 签署协议,表示未 ...

  8. Apollo自动驾驶入门课程第⑩讲 — 控制(下)

    目录 1. 线性二次调节器 2. 模型控制预测 3. 总结 本文转自微信公众号:Apollo开发者社区 原创: 阿波君 Apollo开发者社区 昨天 Apollo自动驾驶课程马上进入尾声,在无人驾驶技 ...

  9. Apollo自动驾驶入门课程第⑧讲 — 规划(下)

    目录 1. 路径-速度解耦规划 2. 路径生成与选择 3. ST图 4. 速度规划 5. 优化 6. 路径-速度规划的轨迹生成 7. Lattice规划 8. ST轨迹的终止状态 9. SL轨迹的终止 ...

最新文章

  1. 【数据挖掘】决策树 分类 ( 抽取分类规则 | 过拟合 | 剪枝 | 先剪 | 后剪 | 连续数值离散化 | 最优化分点 | 增益率选择划分属性 )
  2. 高斯滤镜模糊CSS3
  3. java super是什么意思_java中Super到底是什么意思?必须举例说明!
  4. 一个按钮触发多个a标签,只有一个可以下载,其他的window.open()被浏览器拦截...
  5. NexT 主题自定义侧边栏图标
  6. matlab gui制作,MATLAB GUI制作教程
  7. mysql查询耗时操作_mysql记录耗时的sql实例详解
  8. kafka sasl java_Kafka安装及开启SASL_PLAINTEXT认证(用户名和密码认证)
  9. python pygame 游戏实践: 俄罗斯方块(Tetris Game)第一步
  10. 常见的网站推广方法有哪些?
  11. 国企数字化转型主要工作
  12. RISC和CISC,究竟有何不同?
  13. 全国计算机技术与软件专业技术考试----(中级资格/工程师)各资格证详细介绍
  14. 2020年技术研发岗薪酬排名
  15. 【机器学习实战】朴素贝叶斯(连续型/离散型)
  16. 最全maven archetype 配置!
  17. linux连接wifi账户密码忘了怎么办,wifi登录密码忘记了怎么办?
  18. 后台管理系统之权限管理
  19. 「我只是认真」聊聊工匠情怀
  20. 【Matlab】Matlab读取dcm图像的函数以及CT值失真的问题处理

热门文章

  1. 十大事件与Java相关的四十个名字(转载)
  2. 别学了!这 5 种有可能即将消亡的编程语言
  3. Java混乱器Zelix KlassMaster逆向工程(五) 针对 ZKM处理 for/while/switch的介绍
  4. java执行jar包出错:Unable to access jarfile
  5. 生日祝福html_太康县网上订生日蛋糕预定跑腿送货上门提前预订蛋糕电话
  6. 这东西有什么好吃的,我也就吃了二十多碗吧 | 钛空舱
  7. 【记录】VUE3 + VITE + TS 配置跨域
  8. Mavenir推出云原生、模块化和基于微服务的融合计费解决方案(CCS)
  9. 【列空间(column spaces)】
  10. 爱e聚合桌面 v1.0.2008.0530 免费下载