借助 OpenCV 找到车载记录仪中的车道线
2018-08-16 19:17:07爱云资讯阅读量:1,131
大家好!在此项目中,我将尝试从车载记录仪的视频中寻找车道线。当我们检测到车道线,我们将在原视频帧上将他们标记出来并回放。所有的一切工作将在线上使用 OpenCV 提供的函数完成,并且不会存在任何延迟。
在此我们将编辑一系列的函数来检测车道线。我们在编写此函数的时候将用到一个示例图像,一旦我们能在一些示例图像的基础上成功地检测到车道线,我们将完整的程序添加到一个函数里去,该函数能接收实时图像,并返回带有车道线标记的相同图像。让我们立刻开始学习吧。
首先,输入示例图像帧。此行将在最终的代码中进行注释,其中 image 将通过视频捕获来获得帧。
示例图
为了减轻我们处理器的负担(这在嵌入式系统中是非常稀缺的资源),我们将在 Greyscale 版本的图像中进行所有图像处理,而不是原始的彩色版本,这将有助于用更少的资源更快地执行程序。以下函数将彩色图像转换成灰度版本。
灰度图像
接下来我们将通过模糊来消除图像中的噪声,通过将图像与低通滤波器内核卷积来实现图像模糊。它有助于消除噪音,实际上从图像中去除了高频内容(例如:噪声,边缘),因此在此操作中边缘会有些模糊。OpenCV 提供 4 种不同类型的模糊技术,高斯模糊是最受欢迎的一种。
图像模糊(图像平滑化)
我们能选择不同的内核大小,其中结果过滤器将简单地取内核(内核大小行 x 列的矩阵)区域的平均像素值,并用平均值代替中心元素。而 5 是一个标准值,故我选择了 5。
边缘检测
canny 边缘检测是边缘检测的常用算法。实际上,canny 边缘函数还实现了一个内核大小为 5x5 的高斯过滤器,这和我们之前的步骤一样,但是在我遇到的许多文献中,都推荐在 canny 边缘检测之前先对其进行图像模糊。边缘检测背后的基础理论是,无论何处有边缘,边缘两侧的像素在强度上有着很大的差异(也称为梯度)。首先,在水平和垂直方向上扫描输入图像以找到每个像素的梯度。在获得梯度幅度和方向之后,完成图像的全扫描以去除可能不构成边缘的任何不想要的像素。为此,在每个像素处检查像素是否是其邻域中的局部最大值。
low_threshold 和 high_threshold 确定必须检测边缘的强度。如果梯度高于 high_threshold ,则将此梯度视为边缘的一部分,但是一旦检测到边缘,即使梯度高于 low_threshold ,下一个像素将被视为边缘。
参考我们的示例图像,很明显在边缘条件下,尤其是在车道线是白色的,邻近的车道像素是黑色的时候,相邻的像素存在着巨大的差异。
感兴趣区域
有一点需要考虑的是,我们并不想查找图像中的所有边缘。我们只对图像中中心区域的车道线查找感兴趣。直观上这是可行的,车道线是不可能在图像的左上/右上部分。看我们的示例图像,我们可以有把握地说,车道线应位于图像底部边缘较宽的梯形区域内。随着边缘逐渐变窄,我们朝向图像的顶部。
相关文章
- 借助 DPU 开启 HPC 和超级计算性能的新时代
- 高通艾和志称赞中国汽车惊人变化,借助5G等技术加速汽车变革
- 借助年轻化场景与新科技力量,Leader在行业“寒冬季”稳步上扬
- 借助人工智能,松鼠Ai让数字化教育走进寻常百姓家
- SNAP借助AR技术打造个性化购物体验,微美全息AI视觉打造SDK广告服务
- 后流量时代,iQOO如何借助天猫超级新秀,实现品效共生?
- 2020年手机行业盘点:挥别黑天鹅,借助5G走出阴霾
- IBM借助AI与混合云,为首届“无观众”美网公开赛开创观球新体验
- 借助人工智能MR可以比传统扫描快4倍并且准确
- 迎接5G时代,远传电信借助AI预测模型动态优化网络流量
- 58同城线上推广赋能建筑企业,南京吴晓晓五金建材借助平台引流再度启航
- 索尼PS5支持AMD 3A智能加速:借助动态频率体验更极致
- Google借助计算引擎A2 VMs在云中推出了首批NVIDIA Ampere A100 GPU
- 拉卡拉支付借助新基建助力商户加快数字化转型步伐
- AI抗疫!美国科学家正借助机器学习、大数据寻找新冠肺炎最佳疗法
- 国家疾控中心借助百度大脑UNIT疫情机器人实现24小时“疾控科普”