当前位置:   article > 正文

Canny算法实现车道线检测_canny算子车道线检测

canny算子车道线检测

算法基于Python3.6实现
Python库

  1. opencv-python
  2. matplotlib
  3. numpy

下图是测试结果。
在这里插入图片描述
详细流程

  1. 输入图片并将其转换为灰度图
  2. 通过高斯滤波平滑图片去噪
  3. 使用Canny算法检测边缘
  4. 提取感兴趣候选区域
  5. 霍夫变换,直线检测
  6. 直线拟合得到车道线

图像处理
Candy算法介绍可以参考:https://blog.csdn.net/sc944201630/article/details/81272154

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

# 读取图片
def load_image(path, show_img=False):
	img = cv2.imread(path)
	if(show_img):
		cv2.imshow("original img", img)
		cv2.waitKey(-1)  # 按下任意键继续
	return img

# 对图片进行灰度化,能加速边缘检测
def image_gray(img, show_gray=False, save_gray_img=False):
	img_gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
	if show_gray:
		cv2.imshow("gray_image", img_gray)
		cv2.waitKey(-1)
	if save_gray_img:
		cv2.imwrite("./gray_img.jpg", img_gray)
	return img_gray

# canny 算法,边缘检测
# cv2.Canny()参数:分别是输入图片,较小阈值和较大阈值
def canny_edge(img, g_kernel, g_dev, lth, hth, show_img=False, save_img=False):
	# 高斯滤波
	# (g_kernel, g_kernel) 高斯滤波的大小设置
	# g_dev: 高斯滤波的标准差,如果设置为0.0即自动生成
	# 滤波效果由标准差来决定
	img_gaussian = cv2.GaussianBlur(img, (g_kernel, g_kernel), g_dev)
	img_edge = cv2.Canny(img_gaussian, lth, hth)
	if save_img:
		cv2.imwrite("./img_edge.jpg", img_edge)
	if show_img:
		cv2.imshow("img_edge", img_edge)
		cv2.waitKey(-1)
	return img_edge
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37

我们得到的边缘信息图片如下:
在这里插入图片描述
边缘处理
得到边缘信息之后我们需要提取感兴趣候选区域,感兴趣候选区域可通过代码自动提取,但这里我们是手动提取感兴趣候选区域。

# 提取感兴趣候选区域
# 显示图片,获取车道线坐标
# plt.imshow(img)
# plt.show()

# 提取区域,创建掩膜
def get_mask(img, show_img=False
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/348788
推荐阅读
相关标签
  

闽ICP备14008679号