python基于opencv的车道线检测左右转弯原理详解

这篇具有很好参考价值的文章主要介绍了python基于opencv的车道线检测左右转弯原理详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

该项目的目标/步骤如下:

  • 给定一组棋盘图像计算相机校准矩阵和畸变系数。
  • 对原始图像应用失真校正。
  • 使用颜色变换、渐变等来创建阈值二值图像。
  • 应用透视变换来校正二进制图像(“鸟瞰图”)。
  • 检测车道像素并拟合以找到车道边界。
  • 确认检测到的线与现实和之前的线一致,即它们具有相似的曲率,水平距离在3.7m左右等。
  • 确定车道的曲率和车辆相对于中心的位置。
  • 将检测到的车道边界变形回原始图像。
  • 输出车道边界的视觉显示以及车道曲率和车辆位置的数值估计。

校准图像的过程使用棋盘图案并从对象点的定义开始(现实世界中奶酪图案上的已知点以 xyz 坐标给出,其中 z=0 因为图案位于平面上)和图像点(在图像上找到的点,使用函数:cv2.findChessboardCorners)。对于文件夹“/camera_cal”中的每个图像,这些点存储在 numpy 数组中。通过匹配图像和目标点(使用函数 cv2.calibrateCamera),我们可以获得相机矩阵和畸变参数,这将允许我们使用“cv2.undistort”函数对图像进行去畸变。然后将这些参数保存在 pickle 文件中以备将来使用。

 图。1。扭曲的棋盘图案

python编程车道线识别,计算机视觉,人工智能

 图 2。未扭曲的棋盘图案

管道

在这里,我总结了我的车道数据操作管道。

1.畸变校正

应用相机不失真(功能不失真(img,mtx,dist,None,mtx)),我们可以从失真图像(img):到未 

python编程车道线识别,计算机视觉,人工智能

 失真图像:  通过使用相机矩阵(mtx)和失真系数(dist) .

2. 得到一个阈值化的二值图像

我结合使用了颜色和渐变阈值来生成二值图像(用于渐变和颜色阈值的不同函数在文件的project.py第 25 行和第 76 行之间)。

为了确定哪些通道更适合做阈值处理,我显示了几个图像的所有通道: 

很明显,来自 RGB 的通道 R、来自 HLS 的通道 S 和来自 HSV 的通道 V 是车道线似乎更加突出的通道。所以现在,为了定义我实际要使用的那些,我通过将 X 边缘与 Y 边缘和 XY 边缘与边缘梯度阈值相结合来对这些通道执行边缘检测: 

python编程车道线识别,计算机视觉,人工智能

和颜色阈值: 

通过混合、边缘和颜色阈值化,从这些通道我们可以得到: 

这清楚地显示了预期的车道线。/project.py用于在这 3 个通道上获取二进制阈值图像的代码可以在第 82 行和 171 行之间的文件中找到

3.透视变换

为了获得透视变换矩阵和逆矩阵,我重复使用了第一个项目中的一些代码,以便在我知道包含直线的图像上获得直线车道线: 

python编程车道线识别,计算机视觉,人工智能

我得到的源点和目标点如下:

来源 目的地
587、455 300, 100
230、712 300, 720
1098, 712 980, 720
698, 455 980, 100

有了这些点,我使用函数计算了矩阵 M 和 M_invcv2.getPerspectiveTransform(src, dst)

通过取 4 个点(每行 2 个点)并定义边距,我可以将图像从正常视角转换(使用 jupyter notebook 第五块上的代码)到鸟瞰图(使用函数/P2_advanced_line_detection.ipynbcv2 .warpPerspective()): 

在获得 M 和 M_inv 矩阵后,我将它们保存在 pickle 文件中以备将来与函数一起使用。

然后可以将二进制边缘图像转换为扭曲的二进制图像,如下所示: 

在尝试了几张图片后,我注意到在某些情况下(阴影、人行道上的颜色变化),很难为 S 通道找到一个不产生极端噪音的合适阈值,这就是我决定工作的原因R 和 V 通道的组合。这种组合产生如下二进制扭曲图像:

python编程车道线识别,计算机视觉,人工智能

为了使用阴影产生的噪声圆顶,我决定使用称为开运算的形态学操作: python编程车道线识别,计算机视觉,人工智能

车道线识别

用于拟合二阶多项式的函数在文件的/project.py第 178 行到第 408 行之间。对于第一张图像以及在轨道丢失的情况下(由完整性检查确定),我使用了“windows”方法: python编程车道线识别,计算机视觉,人工智能

当轨道被锁定时,最好简单地检测前一个多项式周围的车道线: python编程车道线识别,计算机视觉,人工智能

计算曲率

/project.py我使用课程中给出的公式在代码的第 502 行到 516 行中执行了此操作。

def measure_curvature_real(actual_fit, ploty):
    '''
    Calculates the curvature o
    f polynomial functions in meters.
    '''
    ym_per_pix = 30/700 # meters per pixel in y dimension
    xm_per_pix = 3.7/700 # meters per pixel in x dimension
    # Define y-value where we want radius of curvature
    # We'll choose the maximum y-value, corresponding to the bottom of the image
    y_eval = np.max(ploty) * ym_per_pix
 
    ##### Implement the calculation of R_curve (radius of curvature) #####
    curvature = ((1 + (2*actual_fit[0]*y_eval + actual_fit[1])**2)**1.5) / np.absolute(2*actual_fit[0])
    return curvature * actual_fit[0]/abs(actual_fit[0])

健全性检查

为了决定是否应该考虑检测,我决定检查 3 个基本的东西

  1. 实际曲率应与前一帧的曲率相似
  2. 左右线曲线至少应具有相同的方向符号(二阶导数),除非线几乎是直的(高曲率)
  3. 线应该是相对平行的。在这里,我在以下函数中测量了水平距离平均值(应该在 3.7m 左右)和标准偏差:
#====Function to measure horizontal position's average and standard deviation====#
#==========between lines. The function also measures the car's position==========#
def horizontal_distance(left_fit,right_fit,ploty):
    xm_per_pix = 3.7/700
    left_fitx = (left_fit[0]*ploty**2 + left_fit[1]*ploty + left_fit[2]) * xm_per_pix
    right_fitx = (right_fit[0]*ploty**2 + right_fit[1]*ploty + right_fit[2]) * xm_per_pix
    average_distance = np.average(right_fitx - left_fitx)
    std_distance = np.std(right_fitx - left_fitx)
    
    x_der = right_fitx[0]
    x_izq = left_fitx[0]
    center_car = (1280*xm_per_pix/2.0)
    center_road = ((x_der+x_izq)/2.0)
    position = center_car-center_road
    return average_distance, std_distance, position

结果

一旦检测到车道线并通过健全性检查,就会计算曲率,并使用逆透视变换在原始图像中显示线条。

python编程车道线识别,计算机视觉,人工智能python编程车道线识别,计算机视觉,人工智能

效果视频:

python基于opencv的车道线检测车道线识别输出车道边界的视觉显示以及车道曲率和车辆位置的数值估计文章来源地址https://www.toymoban.com/news/detail-775927.html

项目下载:https://download.csdn.net/download/babyai996/87738691

到了这里,关于python基于opencv的车道线检测左右转弯原理详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 竞赛项目 车位识别车道线检测 - python opencv

    🔥 优质竞赛项目系列,今天要分享的是 🚩 深度学习 机器视觉 车位识别车道线检测 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🥇学长这里给一个题目综合评分(每项满分5分) 难度系数:3分 工作量:3分 创新点:4分 🧿 更多资料, 项目分享: https://gitee.com

    2024年02月13日
    浏览(42)
  • 竞赛保研 车位识别车道线检测 - python opencv

    🔥 优质竞赛项目系列,今天要分享的是 🚩 深度学习 机器视觉 车位识别车道线检测 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🥇学长这里给一个题目综合评分(每项满分5分) 难度系数:3分 工作量:3分 创新点:4分 🧿 更多资料, 项目分享: https://gitee.com

    2024年01月24日
    浏览(48)
  • 软件杯 深度学习+opencv+python实现车道线检测 - 自动驾驶

    🔥 优质竞赛项目系列,今天要分享的是 🚩 **基于深度学习的自动驾驶车道线检测算法研究与实现 ** 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🥇学长这里给一个题目综合评分(每项满分5分) 难度系数:3分 工作量:4分 创新点:4分 🧿 更多资料, 项目分享:

    2024年04月14日
    浏览(45)
  • 竞赛选题 深度学习+opencv+python实现车道线检测 - 自动驾驶

    🔥 优质竞赛项目系列,今天要分享的是 🚩 **基于深度学习的自动驾驶车道线检测算法研究与实现 ** 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🥇学长这里给一个题目综合评分(每项满分5分) 难度系数:3分 工作量:4分 创新点:4分 🧿 更多资料, 项目分享:

    2024年02月08日
    浏览(71)
  • 竞赛选题 深度学习 机器视觉 车位识别车道线检测 - python opencv

    🔥 优质竞赛项目系列,今天要分享的是 🚩 深度学习 机器视觉 车位识别车道线检测 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🥇学长这里给一个题目综合评分(每项满分5分) 难度系数:3分 工作量:3分 创新点:4分 🧿 更多资料, 项目分享: https://gitee.com

    2024年02月07日
    浏览(59)
  • 深度学习毕设项目 深度学习+opencv+python实现车道线检测 - 自动驾驶

    🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。 为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天

    2024年02月04日
    浏览(71)
  • aruco二维码检测原理详解与基于opencv的代码实现(自己详细整理)

    aruco二维码检测原理讲解及基于opencv的代码和ros功能包实现 20240403 aruco二维码介绍 aruco又称为aruco标记、aruco标签、aruco二维码等,其中 CharucoBoard GridBoard AprilTag 原理相通,只是生成字典不同,而AprilTag用于机器人领域或可编程摄像头比较多,而aruco CharucoBoard GridBoard则用于AR应用

    2024年04月13日
    浏览(49)
  • python+opencv+mediapipe实现手势检测上下左右(含完整代码)

    应用场景:ai换脸,根据左右手势选择图片,上下则表示选中。 版本号:python3.7(一开始是3.6,但是mediapipe最低就是3.7 因为网上检测的都不太准,所以我在判断的时候加入了如果70次里55次检测的是左才返回左,测试完之后效果还可以,蛮准的。判断方法想的头都要秃了。 实

    2024年04月11日
    浏览(49)
  • 小车PWM调速-左右轮差速转弯

    之前写的左转和右转函数都是一个轮子停止,另一个轮子转动,才实现了转弯效果,那差速就是,两个轮子都转动,只不过一个轮子快,一个轮子慢,这样就实现了较平滑的转弯 左转:右轮快,左轮慢 右转:右轮慢,左轮快 程序 程序文件 1.main.c:调用定时器0和定时器1初始

    2024年02月16日
    浏览(44)
  • 基于OpenCV的人脸检测软件(含Python源码+UI界面+图文详解)

    摘要: 人脸检测 的目标是找出图像中所有的人脸对应的位置,算法的输出是人脸外接矩形在图像中的坐标,可能还包括姿态如倾斜角度等信息。本文详细介绍了其实现的技术原理,同时给出完整的 Python 实现代码,并且通过 PyQT 实现了UI界面,并包含图片、视频及摄像头的人

    2024年02月05日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包