opencv 边缘平滑_基于OpenCV的车道检测实现(一)
无人驾驶的话题日趋起热,而车道线检测对于无人驾驶的路径规划来讲特别重要。要遵守交通规则,首先的要求便是对车道线检测,而且通过检测车道线可以进一步的检测地面指示标志、进行前碰撞预警策略设计等。
早早就对OpenCV感兴趣,但迟迟未去实践,现在我们就一起看看如何基于OpenCV进行检测吧!
步骤:
1、Canny边缘检测算法的实现
2、OPENCV ROI(感兴趣区域替换)
3、霍夫变换
4、离群值过滤
5、最小二乘拟合
6、直线绘制与整合
1、canny边缘检测算法
Opencv中的几种边缘检测算法_人工智能_k-CSDN博客blog.csdn.net
首先,Canny 边缘检测是一种非常流行的边缘检测算法。忘记讲了,前面需要将图片灰度化,这样使得图片更好处理。
原图:
灰度之后:
img=cv2.imread('img.jpg',cv2.IMREAD_GRAYSCALE)
接着进行边缘检测:
edge_img=cv2.Canny(img,100,150)
Canny边缘检测算法:
step1:用高斯滤波器平滑图象;
step2:用一阶偏导的有限差分来计算梯度的幅值和方向;
step3:对梯度幅值进行非极大值抑制;
step4:用双阈值算法检测和连接边缘。
Canny(名称,下阈值,上阈值)
主要利用梯度来看是否为边缘,上阈值以上的保留,下阈值以下的消去,中间的若与上阈值相连的则可留下,这样则可消去大量噪点。
2、roi去除背景
opencv ROI(感兴趣区域替换)www.cnblogs.com
首先,要考虑原图以什么形式保存,这里采用的是利用掩码,产生一块对应的画布,进行替代。
mask=np.zeros_like(edge_img)
mask=cv2.fillPoly(mask,np.array([[[20,488],[700,100],[130,200],[120,200]]]),color=255)
masked_edge_img=cv2.bitwise_and(edge_img,mask)
这里则需要确定画布的四个点的位置,color=255为黑色。
3、霍夫变换
霍夫变换www.cnblogs.com
在直角坐标系中,我们可以通过绘制 y 对 x 的图像来表示 y=mx+b。但在霍夫空间中,我们也可以通过绘制 b 对 m 的图像将这条线表示为一个点,即用极坐标方程。
例如,直线方程 y=2x+1 在霍夫空间中可能是用 (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:mean=np.mean(slopes)diff=[abs(s-mean) for s in slopes]idx=np.argmax(diff)if diff[idx]>threshold:slopes.pop(idx)lines.pop(idx)else:breakreturn lines
reject_abnormal_lines(left_lines,threshold=0.002)
通过以上三步,我们便可初步将车道线的位置确定下来。欢迎大家一起来尝试!
opencv 边缘平滑_基于OpenCV的车道检测实现(一)相关推荐
- c++opencv汉字分割_基于OpenCV 的车牌识别
车牌识别是一种图像处理技术,用于识别不同车辆.这项技术被广泛用于各种安全检测中.现在让我一起基于OpenCV编写Python代码来完成这一任务. 车牌识别的相关步骤 1.车牌检测:第一步是从汽车上检测 ...
- java opencv bp网_基于Opencv自带BP网络的车标简易识别
记得把这几点描述好咯:代码实现过程 + 项目文件结构截图 + 演示效果 1.准备工作 1.1 训练集和测试集准备 先将数据集手动划分成训练集和测试集,并分好类,比如第一类就放在文件夹名为0的文件夹下, ...
- opencv 轮廓放大_基于openCV,PIL的深色多背景复杂验证码图像转灰度二值化,并去噪降噪处理分析...
title: [python]基于openCV,PIL的深色多背景复杂验证码图像转灰度二值化,并去噪降噪处理分析 type: categories copyright: true categories ...
- opencv python考勤_基于opencv和dlib人脸识别的员工考勤系统
已打包生成可执行文件exe,可直接下载运行,exe文件及代码均已上传到我的github,点击传送门,打包的具体过程及教程可见pyinstaller简明教程 WorkAttendanceSystem 一 ...
- opencv 图片边缘渐变_基于OpenCV的图像卡通化
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本期将创建一个类似于Adobe Lightroom的Web应用程序 ...
- opencv 图片叠加_基于OpenCV的红绿灯识别代码解析
一堆废话 红绿灯分为导向灯和圆形灯.一般圆形灯在路口只有一盏灯,红灯亮时禁止直行和左转,可以右转弯.导向灯市带有箭头的,可以有两个或三个,分别指示不同方向的行车和停车.按指示的灯即可,没有右转向导向灯 ...
- opencv 处理黑夜_基于 opencv图像去噪
1. 实验步骤:先为灰度图像添加高斯噪声.胡椒噪声.盐噪声和椒盐噪声,再分别利用算术均值滤波器.几何均值滤波器.谐波和逆谐波均值滤波器进行图像去噪.模板大小为5*5. 核心代码如下: 添加各类噪声: ...
- 检测噪声大小的c语言程序,单片机课程设计(论文)_基于AT89C51的噪音检测自适应系统设计.doc...
单片机课程设计(论文)_基于AT89C51的噪音检测自适应系统设计 摘 要 本文以AT89S52 单片机为控制核心,通过播音判断电路寻找广播间歇时段,实时采集噪声环境内的噪音信 号,根据A/ D 转换 ...
- opencv 梯度幅值_基于OpenCV的图像梯度与边缘检测!
严格的说,梯度计算需要求导数.但是图像梯度的计算,是通过计算像素值的差得到梯度的近似值.图像梯度表示的是图像变化的速度,反映了图像的边缘信息. 边缘是像素值快速变化的地方.所以对于图像的边缘部分,其灰 ...
最新文章
- 找到二叉树中的最大搜索子树
- C语言及程序设计初步例程-33 三种循环语句
- OpenGL tessmodes细分模式的实例
- 《微软开源跨平台移动开发实践》团购通知
- stm32l0的停止模式怎么唤醒_Mac外接显示器的显示模式怎么设置
- 实验四Java_《Java实验四》
- Synergy,一个软件团队质量改进之路之一 --- 规划
- 谱图理论-拉普拉斯矩阵理解
- Zabbix安装记录
- 分享10个值得每天一看的精品网站,可以让你全方面得到提升,每一个都会让你大开眼界。
- 魔兽怀旧服服务器位置,魔兽世界怀旧服PDD在哪个服务器 魔兽世界怀旧服pdd去哪个区...
- [英语歌曲]老鹰之歌:If I Could (El Condor Pasa)
- css3边框背景border-image
- python累乘怎么写_python实现累乘multi函数(函数参数不限)
- 音乐 组件 (音频, 视频)
- 在Linux系统中访问虚拟机的数据库和访问Windows(本机)下的数据库:
- 手机开热点显示互联网无服务器,win10热点无互联网连接的具体解决办法【图文】...
- 波音飞机计算机论文,飞机制造毕业论文范文.doc
- 删除内置不卡米教程_“异形钻”也很美,想来点不一样的?
- linux服务器安装vncserve过程记录
热门文章
- 在XML里的XSD和DTD以及standalone的使用
- Qt5:渐变效果的实现
- linux的常用操作——gcc
- druid seata 配置_架构设计 | 基于Seata中间件,微服务模式下事务管理
- python 首次登陆outlook 脚本_记Python“用户环境”的一次完美应用
- C++vector的reserve和resize比原来的容量小
- QT学习笔记(七):定时器事件的3种常用使用方式
- JavaSE——面向对象高级(继承、final关键字、抽象类与接口、多态、Object类、内部类、包装类、可变参数)
- c++中求前n项和(这代码不得不让我佩服)
- pyspider 安装 和 快速开始