python实现简单的车道线检测

描述

python实现简单的车道线检测,本文章将介绍两种简单的方法

  1. 颜色阈值+区域掩模
  2. canny边缘检测+霍夫变换

这两种方法都能实现简单的车道线检测demo,注意仅仅是demo

下面的图片是用到的测试图片

方法1:颜色阈值(Color Selection)+ 区域掩模(Region Masking)

  • 我们可以仅仅通过设置一些RGB通道阈值,来提取车道线。

以下的代码设置了RGB通道阈值为220,大于220的像素将设置为黑色,这样可以将测试图片中的车道线提取出来

效果如下

我们发现符合阈值的像素既包括了车道线,也包含了其他非车道线部分。
显然,一个成熟的自动驾驶感知算法,是不可能使用这种方法的。仅仅依靠颜色,既不科学也不鲁棒。

  • 有一种改进思路是利用图像掩模的方法

假设拍摄图像的前置摄像头安装在汽车上的固定位置,这样车道线将始终出现在图像的相同区域中。我们将设置了一个区域,认为车道线处于该区域内。我们设置了一个三角形的区域,原则上你可以使用其他形状

  • 如果两个方法结合一下,我们就可以得到这样的效果
    python代码如下
import matplotlib.pyplot as pltimport matplotlib.image as mpimgimport numpy as np# Read in the imageimage = mpimg.imread('test.jpg')# Grab the x and y sizes and make two copies of the image# With one copy we'll extract only the pixels that meet our selection,# then we'll paint those pixels red in the original image to see our selection# overlaid on the original.ysize = image.shape[0]xsize = image.shape[1]color_select= np.copy(image)line_image = np.copy(image)# Define our color criteriared_threshold = 220green_threshold = 220blue_threshold = 220rgb_threshold = [red_threshold, green_threshold, blue_threshold]# Define a triangle region of interest (Note: if you run this code,left_bottom = [0, ysize-1]right_bottom = [xsize-1, ysize-1]apex = [650, 400]fit_left = np.polyfit((left_bottom[0], apex[0]), (left_bottom[1], apex[1]), 1)fit_right = np.polyfit((right_bottom[0], apex[0]), (right_bottom[1], apex[1]), 1)fit_bottom = np.polyfit((left_bottom[0], right_bottom[0]), (left_bottom[1], right_bottom[1]), 1)# Mask pixels below the thresholdcolor_thresholds = (image[:,:,0] < rgb_threshold[0]) | \                    (image[:,:,1] < rgb_threshold[1]) | \                    (image[:,:,2] < rgb_threshold[2])# Find the region inside the linesXX, YY = np.meshgrid(np.arange(0, xsize), np.arange(0, ysize))region_thresholds = (YY > (XX*fit_left[0] + fit_left[1])) & \                    (YY > (XX*fit_right[0] + fit_right[1])) & \                    (YY < (XX*fit_bottom[0] + fit_bottom[1]))# Mask color selectioncolor_select[color_thresholds] = [0,0,0]# Find where image is both colored right and in the regionline_image[~color_thresholds & region_thresholds] = [255,0,0]# Display our two output imagesplt.imshow(color_select)plt.imshow(line_image)# uncomment if plot does not displayplt.show()

点击python实现简单的车道线检测 - 古月居 可查看全文

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

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

相关文章

802.1X认证原理

IEEE802 LAN/WAN委员会为解决无线局域网网络安全问题,提出了802.1X协议。后来,802.1X协议作为局域网接口的一个普通接入控制机制在以太网中被广泛应用,主要解决以太网内认证和安全方面的问题。 802.1X协议是一种基于接口的网络接入控制协议。…

喜讯|我司再次获得国家发明专利,硬核科技研发成果呈加速度增长

热烈祝贺 璞华软件成功获得国家发明专利 我司自主研发成果《一种工伤案件裁决书的生成方法及装置》(专利号:ZL 2019 1 1170975.8)成功获得国家发明专利,2024年4月成功获得专利证书。 发明人:高志凯;杨德…

小程序面试题之项目业务流程9道

1.视频、音频等内容的播放状态存储操作流程一般如何 在进行音、视频播放的时候会涉及到播放不同的音、视频内容 一般会要求应用能够记录每一个音、视频播放的历史记录点,以便于下次播放可以从指定位置开始 我们可以将音、视频播放的记录存储于本地缓存当中&#xff…

OSCP靶场--RPC1

OSCP靶场–RPC1 考点 1.nmap扫描 ## ┌──(root㉿kali)-[~/Desktop] └─# nmap -sV -sC 192.168.227.236 -p- -Pn --min-rate 2500 Starting Nmap 7.92 ( https://nmap.org ) at 2024-04-14 22:21 EDT Nmap scan report for 192.168.227.236 Host is up (0.14s latency). …

移动开发避坑指南——内存泄漏

在日常编写代码时难免会遇到各种各样的问题和坑,这些问题可能会影响我们的开发效率和代码质量,因此我们需要不断总结和学习,以避免这些问题的出现。接下来我们将围绕移动开发中常见问题做出总结,以提高大家的开发质量。本系列文章…

【产品经理修炼之道】- 厂商银业务之保兑仓

保兑仓 保兑仓是指供应商、购货商、银行签订三方协议,以银行信用为载体,以银行承兑汇票为结算工具,由银行控制货权,供应商受托保管货物并对银行承兑汇票保证金以外部分以货物回购为担保措施,购货商随缴保证金随提货而设…

不再写满屏import导入

密密麻麻的import语句不仅仅是一种视觉上的冲击,更是对代码组织结构的一种考验。 我们是如何做到让import“占领满屏“的了,又该如何优雅地管理这些import语句呢? 本文将从产生大量import语句的原因、可能带来的问题以及如何优化和管理impo…

Windows上的类似clock_gettime(CLOCK_MONOTONIC)的高精度测量时间函数

2024年4月11更新 感谢评论提醒,我之前写《如何在C/C中测量一个函数或者功能的运行时间(串行和并行,以及三种方法的实际情况对比)》的时候只实验了 Linux 和 Mac 这种类 Unix 系统,没考虑到 Windows。 本文只考虑第一方…

总结java中的synchronized锁

目录 synchronized的特性 synchronized的锁机制 synchronized的使用 synchronized的特性 synchronized主要有三大特性: 面试时经常拿synchronized关键字和volatile关键字的特性进行对比,synchronized关键字可以保证并发编程的三大特性:原子…

yolo系列(之一)

深度学习经典检测算法 two-stage (两阶段) : Faster-rcnn Mask-Rcnn系列 (输入图像---》CNN特征---》预选框---》输出结果) one-stage (单阶段): YOLO系列 (输入图像---》CNN特征---》输出结果) one-stage的特点:&…

python计算

优先级:小括号()>幂运算(指数)>正负号>算术运算(先乘除后加减)>比较运算>逻辑运算

网络基础(二)——传输层

1、再谈端口号 端口号(Port)标识了一个主机上进行通信的不同的应用程序; 在TCP/IP协议中, 用 "源IP", "源端口号", "目的IP", "目的端口号", "协议号" 这样一个五元组来标识一个通信(可以通过 netstat -n查看); 1.1、端口号…