当前位置: 首页 > news >正文

OpenCV-Python小应用(六):车道线检测

OpenCV-Python小应用(六):车道线检测

    • 前言
    • 前提条件
    • 实验环境
    • 基于霍夫变换的车道线检测
    • 参考文献

前言

  • 本文是个人使用OpenCV-Python的应用案例,由于水平有限,难免出现错漏,敬请批评改正。
  • 更多精彩内容,可点击进入OpenCV-Python小应用专栏或我的个人主页查看

前提条件

  • 熟悉Python

实验环境

  • Python 3.6.13 (面向对象的高级语言)
  • OpenCV 3.4.10(python第三方库)pip3 install opencv-python==3.4.10.37

基于霍夫变换的车道线检测

  • 主要思路:利用霍夫变换将图片中的所有直线找出,并通过区域坐标过滤掉不是车道线的直线。这属于传统算法的范畴,有一定的局限性。
  • 霍夫变换相关知识点,可查阅OpenCV-Python快速入门(十五):霍夫变换
import cv2
import numpy as np
import matplotlib.pyplot as plt

# 读取图片
img = cv2.imread('lane.jpg')
# 灰度图
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
# 边缘检测
edges = cv2.Canny(gray,50,150,apertureSize = 3)
# BGR -> RGB
img_RGB=cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
img_Show=img_RGB.copy()
# 概率霍夫变换
'''
lines =cv2.HoughLinesP(image, rho, theta, threshold, minLineLength, maxLineGap)
参数:
    image 是输入图像,即源图像,必须为 8 位的单通道二值图像。
        对于其他类型的图像,在进行霍夫变换之前,需要将其修改为这个指定的格式。
    rho 为以像素为单位的距离 r 的精度。一般情况下,使用的精度是 1。
    theta 是角度𝜃的精度。一般情况下,使用的精度是 np.pi/180,表示要搜索可能的角度。
    threshold 是阈值。该值越小,判定出的直线越多;值越大,判定出的直线就越少。
    minLineLength 用来控制“接受直线的最小长度”的值,默认值为 0。
    maxLineGap 用来控制接受共线线段之间的最小间隔,即在一条线中两点的最大间隔。
            如果两点间的间隔超过了参数 maxLineGap 的值,就认为这两点不在一条线上。默认值为 0。
返回值:
    lines 是由 numpy.ndarray 类型的元素构成的,其中每个元素都是一对浮点数,表示检测到的直线的参数,即(r, θ)。
'''
lines = cv2.HoughLinesP(edges,1,np.pi/180,1,minLineLength=55,maxLineGap=9)

for line in lines:
    x1,y1,x2,y2 = line[0]
    if x1 < 150 or x1 > 500 or x2 > 500 or y2 < 500: # 过滤多余的直线
        continue
    # print(x1,y1,x2,y2)
    cv2.line(img_RGB,(x1,y1),(x2,y2),(255,0,0),10)

# 显示图片
plt.figure(figsize=(40, 40))
plt.subplot(121)
plt.title("Origin")
plt.imshow(img_Show)
plt.subplot(122)
plt.title("Result")
plt.imshow(img_RGB)
plt.show()

在这里插入图片描述

参考文献

[1] https://opencv.org/
[2] 李立宗. OpenCV轻松入门:面向Python. 北京: 电子工业出版社,2019

  • 更多精彩内容,可点击进入OpenCV-Python小应用专栏或我的个人主页查看

相关文章:

  • 微信小程序介绍
  • matlab实现MCMC的马尔可夫转换MS- ARMA - GARCH模型估计
  • 华为云桌面Workspace,让你的办公更加舒适惬意
  • 基于优先级的时间片轮转调度算法(C语言实现)
  • 43特征01——特征值特征向量: 特征多项式、特殊矩阵 的特征值与特征向量、Hamilton-Cayley 定理
  • [毕业设计]机器学习的运动目标跟踪-opencv
  • Ubuntu 软件管理学习笔记
  • python中pytest库用法详解
  • CSRF漏洞简介
  • C/C++航空客运订票系统
  • 编译原理之词法分析器随笔和简单实现
  • 47 - 父子间的冲突
  • 单片机和ARM A的区别
  • STC 51单片机40——汇编语言 串口 接收与发送
  • python破解wifi教程
  • 「译」Node.js Streams 基础
  • canvas 绘制双线技巧
  • cookie和session
  • Git的一些常用操作
  • input实现文字超出省略号功能
  • isset在php5.6-和php7.0+的一些差异
  • jquery ajax学习笔记
  • mongodb--安装和初步使用教程
  • Spring核心 Bean的高级装配
  • 开源地图数据可视化库——mapnik
  • 聊聊hikari连接池的leakDetectionThreshold
  • 区块链共识机制优缺点对比都是什么
  • 算法-插入排序
  • ​决定德拉瓦州地区版图的关键历史事件
  • ​油烟净化器电源安全,保障健康餐饮生活
  • #Linux(make工具和makefile文件以及makefile语法)
  • #NOIP 2014# day.1 T2 联合权值
  • #我与Java虚拟机的故事#连载13:有这本书就够了
  • #在线报价接单​再坚持一下 明天是真的周六.出现货 实单来谈
  • (11)工业界推荐系统-小红书推荐场景及内部实践【粗排三塔模型】
  • (4) PIVOT 和 UPIVOT 的使用
  • (C++)栈的链式存储结构(出栈、入栈、判空、遍历、销毁)(数据结构与算法)
  • (PyTorch)TCN和RNN/LSTM/GRU结合实现时间序列预测
  • (Redis使用系列) Springboot 实现Redis消息的订阅与分布 四
  • (附源码)springboot学生选课系统 毕业设计 612555
  • (论文阅读23/100)Hierarchical Convolutional Features for Visual Tracking
  • (数据结构)顺序表的定义
  • (学习日记)2024.03.12:UCOSIII第十四节:时基列表
  • (一) springboot详细介绍
  • .Family_物联网
  • .java 指数平滑_转载:二次指数平滑法求预测值的Java代码
  • .NET Core 项目指定SDK版本
  • .net 验证控件和javaScript的冲突问题
  • .Net+SQL Server企业应用性能优化笔记4——精确查找瓶颈
  • [ 英语 ] 马斯克抱水槽“入主”推特总部中那句 Let that sink in 到底是什么梗?
  • [<MySQL优化总结>]
  • [Android Pro] AndroidX重构和映射
  • [autojs]autojs开关按钮的简单使用
  • [CentOs7]搭建ftp服务器(2)——添加用户
  • [CISCN2019 华东南赛区]Web11