由于图床过期,图片无法正常显示,有图阅览请移步以下Gitee/Github网址,文末获取【源码和部署教程】或者通过以下Gitee/Github的文末邮件获取

Gitee(推荐国内访问): https://gitee.com/qunmasj/projects

Github(推荐国外访问): https://github.com/qunshansj?tab=repositories

# 1.图片演示
2.png

3.png

5.png

2.视频演示

Python基于OpenCV的视频车道线检测系统[源码&部署教程]

3.边缘检测

参考该博客方案,其算法思想如下:

  1. 使用高斯模糊,去除噪音点(cv2.GaussianBlur)
  2. 灰度转换(cv2.cvtColor)
  3. 使用sobel算子,计算出每个点的梯度大小和梯度方向
  4. 使用非极大值抑制(只有最大的保留),消除边缘检测带来的杂散效应
  5. 应用双阈值,来确定真实和潜在的边缘
  6. 通过抑制弱边缘来完成最终的边缘检测

1.高斯滤波

1
gaussian = cv2.GaussianBlur(color_img, (gaussian_ksize,gaussian_ksize), gaussian_sigmax)

color_img 输入图片
gaussian_ksize 高斯核大小,可以为方形矩阵,也可以为矩形
gaussian_sigmax X方向上的高斯核标准偏差

2.图片转换

1
gray_img = cv2.cvtColor(input_image, flag)

用于颜色空间转换。input_image为需要转换的图片,flag为转换的类型,返回值为颜色空间转换后的图片矩阵。flag对应:
cv2.COLOR_BGR2GRAY BGR -> Gray
cv2.COLOR_BGR2RGB BGR -> RGB
cv2.COLOR_BGR2HSV BGR -> HSV
可以了解一下该函数和cv2.imread()的区别

3.边缘检测

1
edge_img = cv2.Canny(gray_img,canny_threshold1,canny_threshold2)

imag为所操作的图片,threshold1为下阈值,threshold2为上阈值,返回值为边缘图。
6.png

4.ROI and mask

利用数组选取ROI(region of interest,感性趣的区域,然后与原图进行布尔运算(与运算)。
7.png

1
poly_pts = numpy.array([[[0,368],[300,210],[340,210],[640,368]]])

四个数组创建后保存在变量poly_pts中。

1
mask = np.zeros_like(gray_img)

构建一个与gray_img同维度的数组,并初始化所有变量为零。

1
cv2.fillPoly(mask, pts, color)

绘制多边形函数。mask为绘制对像,pts为绘制范围,color为绘制颜色。

1
img_mask = cv2.bitwise_and(gray_img, mask)

与运算
8.png

5.霍夫变换

1
lines = cv2.HoughLinesP(edge_img,  1, np.pi / 180, 15, minLineLength=40, maxLineGap=20)

edge_img: 要检测的图片矩阵
参数2: 距离r的精度,值越大,考虑越多的线
参数3: 距离theta的精度,值越大,考虑越多的线
参数4: 累加数阈值,值越小,考虑越多的线
minLineLength: 最短长度阈值,短于这个长度的线会被排除
maxLineGap:同一直线两点之间的最大距离
返回值::
[np.array([[x_1,y_1, x_2, y_2]]),
np.array([[x_1, y_1, x_2, y_2]]),
…,
np.array([[x_1, y_1, x_2, y_2]])]

6.离群值过滤

受该博客思路启发,循环查找超出设定范围的斜率,并去除

1
idx = np.argmax(diff)

当diff中存放的是一维时,找到diff中最大的数值,并返回该值所在位置。
从列表lines中把第idx数去除

7.车道线标注

1
cv2.line(img, tuple(line[0]), tuple(line[1]), color,thickness)

在图片上画线,img为所标注的目标图片,ine[0]为起点坐标,line[1]为终点坐标,thickness为线宽。
注意两个坐标需要为tuple元组格式,即tuple(line[0])
5.png

8.系统整合

下图完整源码&环境部署视频教程
1.png
参考博客《Python基于OpenCV的视频车道线检测系统[源码&部署教程]》

9.参考文献


如果您需要更详细的【源码和环境部署教程】,除了通过【系统整合】小节的链接获取之外,还可以通过邮箱以下途径获取:

1.请先在GitHub上为该项目点赞(Star),编辑一封邮件,附上点赞的截图、项目的中文描述概述(About)以及您的用途需求,发送到我们的邮箱

sharecode@yeah.net

2.我们收到邮件后会定期根据邮件的接收顺序将【完整源码和环境部署教程】发送到您的邮箱。

【免责声明】本文来源于用户投稿,如果侵犯任何第三方的合法权益,可通过邮箱联系删除。