[机器视觉] 基于opencv-python的单张图片中车道识别实现

本文介绍了基于驾驶模拟游戏《欧洲卡车模拟2》的车道识别项目,通过图像灰度处理、高斯滤波、Canny边缘检测、ROI兴趣区域处理和霍夫直线检测等步骤,实现在单张图片中识别车道线,并展示了处理流程及代码。
摘要由CSDN通过智能技术生成

项目背景

本项目是笔者希望基于驾驶模拟类游戏 欧洲卡车模拟2(ETS2) 实现驾驶辅助系统的设想的一个基础项目 车道识别

关于《欧洲卡车模拟2》

《欧洲卡车模拟2》是一款模拟经营类游戏,在游戏中玩家要驾驶卡车完成货物运输任务,并可以购买更多的车库、卡车、挂车,从司机介绍所雇佣司机来为你工作,组建自己的物流公司。游戏中玩家可以改装自己的卡车、挂车的几乎每一个部件,从驾驶室到底盘到各种配件和内饰。穿越欧洲大陆,组建自己的运输帝国。

项目基本思路

对于车道线检测,首先需要使程序能够检测出单张图片中的车道线,以此为依据进一步拓展至视频中的车道线检测,并最终推至实时画面中的车道线检测。
对于单张图片的车道线识别,我的思路如下:
我们默认摄像机在车内位置是不变的,因此路面在画面中的位置大致是不变的,为了降低噪声影响,我们可以人为选取路面位置作为兴趣区域,并对兴趣区域进行边缘检测与直线识别操作,并最终输出处理结果。

原图
在这里插入图片描述

项目步骤

  • 图像灰度处理
  • 高斯模糊降噪
  • ROI兴趣区域掩膜
  • canny边缘检测
  • 霍夫直线检测
  • 车道线拟合
  • 图像结果输出

图像灰度处理

将原有的RGB三维色彩信息处理为一维的灰度值

gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)

灰度处理结果
灰度处理结果

高斯滤波

降低图片噪声值,便于边缘检测

blur_ksize = 7 
blur_gray = cv2.GaussianBlur(gray, (blur_ksize, blur_ksize), 1)

滤波后结果
高斯滤波结果

canny边缘检测

对图片进行边缘检测,便于下一步的霍夫直线检测

canny_lthreshold = 50          
canny_hthreshold = 80         
edges = cv2.Canny(blur_gray, canny_lthreshold, canny_hthreshold)

canny边缘检测结果
canny边缘检测结果

ROI兴趣区域掩膜处理

通过人为处理去除掉大部分的噪声值,便于直线检测


def roi_mask(img, np.array([[(0, 660), (0, img.shape[1]),(img.shape[1], img.shape[0]), (img.shape[1]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值