使用python里的OpenCV包做简单的车道线检测
参考教程【从车道线检测项目入门OpenCV】 https://www.bilibili.com/video/BV1qk4y1r7jw/?p3share_sourcecopy_webvd_source9332b8fc5ea8d349a54c3989f6189fd3注意首先应该安装OpenCV包。openCV用法读取图片# 读取成灰度 img cv2.imread(img.jpg, cv2.IMREAD_GRAYSCALE) # 显示图片 cv2.imshow(img_gray, img) # 阻塞参数设置为0返回值是等待键盘 cv2.waitKey(0) # 保存文件需要指定文件后缀名 cv2.imwrite(img_gray.bmp, img)canny边缘检测canny计算四个方向的梯度每个方向加上反方向就是八个方向经过运算得到一个梯度值设置了上下阈值edges cv2.Canny(img, minThreshold, maxThreshold)感兴趣区域选取# 创建一个与给定数组形状和类型相同的新数组所有元素都初始化为 0masknp.zeros_like(edge_img)# 用于在图像上填充一个或多个多边形maskcv2.fillPoly(mask,np.array([[[0,368],[300,210],[340,210],[640,368]]]),color255)# 对两个数组或图像进行按位与操作masked_edge_imgcv2.bitwise_and(edge_img,mask)霍夫变换在一定误差范围交于某一个点即可# 获取所有线段linescv2.HoughLinesP(edge_img,1,np.pi/180,15,minLineLength40,maxLineGap20)参数说明image边缘检测后的二值图像通常是使用 Canny 边缘检测或其他方法得到的。 rho从中心到直线的距离的精度以像素为单位。theta角度的精度以弧度为单位。 threshold阈值即一个直线的候选必须有的最小票数即通过变换得到的交点数。minLineLength检测到的线段的最小长度小于这个长度的线段会被忽略。maxLineGap同一直线上的两点之间允许的最大间隙即如果两个线段之间的间隙小于或等于这个值它们会被认为是同一条直线。lineType线条的类型默认是 cv2.CV_8UC1即线条的类型可以是 cv2.CV_8UC1 或cv2.CV_32SC1。返回值lines一个数组其中每个元素是一个 (x1, y1, x2, y2) 的元组表示检测到的线段的两个端点。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2429523.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!