当前位置: 首页 > 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教程
  • 自己简单写的 事件订阅机制
  • android图片蒙层
  • ES6之路之模块详解
  • isset在php5.6-和php7.0+的一些差异
  • Java 内存分配及垃圾回收机制初探
  • javascript 哈希表
  • Python学习之路16-使用API
  • Spring声明式事务管理之一:五大属性分析
  • SQLServer之创建显式事务
  • WebSocket使用
  • 百度小程序遇到的问题
  • 前端
  • 算法-图和图算法
  • 推荐一款sublime text 3 支持JSX和es201x 代码格式化的插件
  • 微信小程序开发问题汇总
  • 微信小程序设置上一页数据
  • 主流的CSS水平和垂直居中技术大全
  • 看到一个关于网页设计的文章分享过来!大家看看!
  • 从如何停掉 Promise 链说起
  • (1)Nginx简介和安装教程
  • (16)UiBot:智能化软件机器人(以头歌抓取课程数据为例)
  • (2009.11版)《网络管理员考试 考前冲刺预测卷及考点解析》复习重点
  • (Note)C++中的继承方式
  • (附源码)ssm基于web技术的医务志愿者管理系统 毕业设计 100910
  • (附源码)基于ssm的模具配件账单管理系统 毕业设计 081848
  • (正则)提取页面里的img标签
  • . NET自动找可写目录
  • .NET Core引入性能分析引导优化
  • .NET 实现 NTFS 文件系统的硬链接 mklink /J(Junction)
  • .NET/C# 获取一个正在运行的进程的命令行参数
  • .NET/C# 在代码中测量代码执行耗时的建议(比较系统性能计数器和系统时间)
  • .NET设计模式(8):适配器模式(Adapter Pattern)
  • .NET下的多线程编程—1-线程机制概述
  • .set 数据导入matlab,设置变量导入选项 - MATLAB setvaropts - MathWorks 中国
  • [android] 手机卫士黑名单功能(ListView优化)
  • [Android学习笔记]ScrollView的使用
  • [AS3]URLLoader+URLRequest+JPGEncoder实现BitmapData图片数据保存
  • [C#]C#学习笔记-CIL和动态程序集
  • [C++数据结构](31)哈夫曼树,哈夫曼编码与解码
  • [HNOI2015]实验比较