瓜果类网站建设方案,网站后台管理系统内容,莱芜论坛莱芜话题,重庆沛宣网站建设无人驾驶的话题日趋起热#xff0c;而车道线检测对于无人驾驶的路径规划来讲特别重要。要遵守交通规则#xff0c;首先的要求便是对车道线检测#xff0c;而且通过检测车道线可以进一步的检测地面指示标志、进行前碰撞预警策略设计等。早早就对OpenCV感兴趣#xff0c;但迟…无人驾驶的话题日趋起热而车道线检测对于无人驾驶的路径规划来讲特别重要。要遵守交通规则首先的要求便是对车道线检测而且通过检测车道线可以进一步的检测地面指示标志、进行前碰撞预警策略设计等。早早就对OpenCV感兴趣但迟迟未去实践现在我们就一起看看如何基于OpenCV进行检测吧步骤1、Canny边缘检测算法的实现2、OPENCV ROI感兴趣区域替换3、霍夫变换4、离群值过滤5、最小二乘拟合6、直线绘制与整合1、canny边缘检测算法Opencv中的几种边缘检测算法_人工智能_k-CSDN博客blog.csdn.net首先Canny 边缘检测是一种非常流行的边缘检测算法。忘记讲了前面需要将图片灰度化这样使得图片更好处理。原图灰度之后imgcv2.imread(img.jpg,cv2.IMREAD_GRAYSCALE)接着进行边缘检测edge_imgcv2.Canny(img,100,150)Canny边缘检测算法step1:用高斯滤波器平滑图象step2:用一阶偏导的有限差分来计算梯度的幅值和方向step3:对梯度幅值进行非极大值抑制step4:用双阈值算法检测和连接边缘。Canny名称下阈值上阈值主要利用梯度来看是否为边缘上阈值以上的保留下阈值以下的消去中间的若与上阈值相连的则可留下这样则可消去大量噪点。2、roi去除背景opencv ROI感兴趣区域替换www.cnblogs.com首先要考虑原图以什么形式保存这里采用的是利用掩码产生一块对应的画布进行替代。masknp.zeros_like(edge_img)
maskcv2.fillPoly(mask,np.array([[[20,488],[700,100],[130,200],[120,200]]]),color255)
masked_edge_imgcv2.bitwise_and(edge_img,mask)这里则需要确定画布的四个点的位置color255为黑色。3、霍夫变换霍夫变换www.cnblogs.com在直角坐标系中我们可以通过绘制 y 对 x 的图像来表示 ymxb。但在霍夫空间中我们也可以通过绘制 b 对 m 的图像将这条线表示为一个点即用极坐标方程。例如直线方程 y2x1 在霍夫空间中可能是用 (2, 1) 表示的。例如对极坐标系中的点 (8, 6)、(4, 9) 和 (12, 3)我们在霍夫空间中绘制出的相应图像如下在霍夫空间中相交的曲线越多意味着用交点表示的线对应的点越多。如此我们便可在霍夫空间中定义了交点的最小阈值以便检测车道线消去无用的线。如果交点数量超过了定义的阈值我们就确定一条对应参数 θ 和 r 的线。left_lines[line for line in lines if calculate_slope(line)0]
right_lines[line for line in lines if calculate_slope(line)0]
def reject_abnormal_lines(lines,threshold):slopes[calculate_slope(line) for line in lines]while len(lines)0:meannp.mean(slopes)diff[abs(s-mean) for s in slopes]idxnp.argmax(diff)if diff[idx]threshold:slopes.pop(idx)lines.pop(idx)else:breakreturn lines
reject_abnormal_lines(left_lines,threshold0.002)通过以上三步我们便可初步将车道线的位置确定下来。欢迎大家一起来尝试