python图像识别马路_OpenCV-Python:车道检测

任务:

一共要完成两项任务:

1. 在所提供的公路图片上检测出车道线并标记

2. 在所提供的公路视频上检测出车道线并标记

方案:

要检测出当前车道,就是要检测出左右两条车道直线。由于无人车一直保持在当前车道,那么无人车上的相机拍摄视频中,车道线的位置应该基本固定在某一个范围内:

如果我们手动把这部分ROI区域抠出来,就会排除大部分干扰。接下来检测直线肯定用霍夫变换,但ROI区域内的边缘直线信息还是很多,考虑到只有左右两条车道,一条斜率为正、一条斜率为负,可将所有的线分为两组,每组再通过均值或最小二乘法拟合的方式确定唯一一条线就可以完成检测。具体步骤如下:

1. 灰度化

2. 高斯模糊

3. Canny边缘检测

4. 不规则ROI区域截取

5. 霍夫直线检测

6. 车道计算

对于视频来说,只要能检测出一幅图,后面将图像合成一下即可。

图像预处理

灰度化和滤波操作是大部分图像处理的必要步骤。灰度化是因为不需要色彩信息,可以减少计算量。而滤波会削弱图像噪点,排除干扰信息。另外,边缘提取是基于图像梯度的,梯度对噪声很敏感,所以平滑操作必不可少。

这里我们用分模块来写,方便调用:

import cv2

import numpyasnp

# 高斯滤波核大小

blur_ksize= 5# Canny边缘检测高低阈值

canny_lth= 50canny_hth= 150def process_an_image(img):

#1. 灰度化、滤波和Canny

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

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

edges=cv2.Canny(blur_gray, canny_lth, canny_hth)if __name__ == "__main__":

img= cv2.imread('test_pictures/lane.jpg')

result=process_an_image(img)

cv2.imshow("lane", np.hstack((img, result)))

cv2.

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值