初级版无人驾驶车道线检测(上)(含代码)

  公众号上的CV学习系列教程更新一段时间了,目前写了4篇文章。前4篇文章已经包含了很多内容,利用这些知识可以完成Udacity无人驾驶项目的第一个任务——初级版的车道线检测。公众号上已经更新了《CV学习实践项目一 初级版车道线检测(上)》,过段时间会更新《CV学习实践项目一 初级版车道线检测(下)》,欢迎大家订阅公众号——Joe学习笔记。
初级版无人驾驶车道线检测(上)(含代码)_第1张图片
  我录了一个视频来讲解这个内容——视频传送门。
  第一次录视频,录了之后发现自己普通话好不标准。第一部分主要讲了灰度图片转换、高斯滤波、边缘检测、感兴趣区域提取和直线检测,直线拟合部分和目前算法的缺点会在初级版车道线检测(下)中讲。我感觉视频中不是讲的很好,大家可以看公众号计算机视觉前四课的文章。第一部分的代码如下:

import cv2
import numpy as np
import matplotlib.pyplot as plt

#读取图片
img = cv2.imread('test_images/straight_lines2.jpg')
cv2.imshow('img', img)

#转换成灰度图片
img_gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
cv2.imshow('img_gray', img_gray)

#高斯滤波
img_gaussian = cv2.GaussianBlur(img_gray, (11, 11), 0.0)
cv2.imshow('img_gaussian', img_gaussian)

#边缘检测
img_edge = cv2.Canny(img_gaussian, 90, 180)
cv2.imshow("img_edge", img_edge)

#显示图像坐标
plt.imshow(img)
#plt.show()

#感兴趣区域提取
mask = np.zeros_like(img_edge)
vertices = np.array([[200, 670], [610, 410], [650, 410], [1170, 670]])
cv2.fillPoly(mask, [vertices], 255)

img_edge_roi = cv2.bitwise_and(img_edge, mask)
cv2.imshow("img_edge_roi", img_edge_roi)

#霍夫变换,直线检测
lines = cv2.HoughLinesP(img_edge_roi, 1, np.pi/180, 20, minLineLength = 10, maxLineGap = 10)

#画出线
img_line = np.zeros_like(img)
for line in lines:
    for x1, y1, x2, y2 in line:
        cv2.line(img_line, (x1, y1), (x2, y2), [0, 0, 255], 2)

cv2.imshow("img_line", img_line)
cv2.waitKey(-1)

  最后再厚脸皮的推荐下自己的公众号——Joe学习笔记,公众号上会不定期更新一些文章,主要是自己平时学到的知识,内容包括自动驾驶、计算机视觉、人工智能和机器人技术。我会第一时间把文章更新在公众号上,欢迎大家订阅和分享!
公众号文章链接:
CV学习第一课 图片和噪声
CV学习第二课 滤波器
CV学习第三课 图像梯度与边缘检测
CV学习第四课 直线检测—霍夫变换

你可能感兴趣的:(计算机视觉)