计算机视觉 | 交通信号灯状态的检测和识别

2024-04-23 07:12

本文主要是介绍计算机视觉 | 交通信号灯状态的检测和识别,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Hi,大家好,我是半亩花海。本项目旨在使用计算机视觉技术检测交通信号灯的状态,主要针对红色绿色信号灯的识别。通过分析输入图像中的像素颜色信息,利用OpenCV库实现对信号灯状态的检测和识别。


目录

一、项目背景

二、项目功能

三、代码拆解

1. 导入所需的库

2. 读取输入图像

3. 定义颜色阈值范围

4. 转换颜色空间

5. 创建颜色掩膜

6. 查找轮廓

7. 检测红色信号灯

8. 检测绿色信号灯

9. 显示结果

四、结果展示

五、完整代码

六、总结


一、项目背景

随着交通系统的发展,交通信号灯在道路安全和交通管制中扮演着至关重要的角色。传统的信号灯控制需要人工操作,而基于计算机视觉的自动检测系统能够提高交通信号灯的检测效率和准确性,为交通管理带来更多可能性。


二、项目功能

本项目旨在利用计算机视觉技术检测交通信号灯的状态,具体功能包括:

  • 识别输入图像中的红色信号灯和绿色信号灯。
  • 在图像上标记出识别到的信号灯区域,并添加相应的文字标签。

三、代码拆解

1. 导入所需的库

导入OpenCV(cv2)和NumPy库。(使用 pip 安装 opencv-python numpy 库)

import cv2
import numpy as np

2. 读取输入图像

使用 OpenCV 的imread()函数读取输入图像,其中输入图像包含交通信号灯的场景。

img = cv2.imread("light1.png")

3. 定义颜色阈值范围

通过指定红色和绿色的 HSV(色相、饱和度、亮度)值范围,使用 NumPy 库创建相应的颜色阈值范围。

minRed = np.array([0, 127, 128])  
maxRed = np.array([10, 255, 255])
minGreen = np.array([50, 100, 20])
maxGreen = np.array([90, 255, 200])

4. 转换颜色空间

将输入图像从 BGR 颜色空间转换为 HSV 颜色空间,以便更好地识别颜色。

img_hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)

5. 创建颜色掩膜

利用颜色阈值范围,使用 OpenCV 的inRange()函数创建红色和绿色的掩膜。

mask_red = cv2.inRange(img_hsv, minRed, maxRed)  
mask_green = cv2.inRange(img_hsv, minGreen, maxGreen)

6. 查找轮廓

利用 OpenCV 的findContours()函数找到掩膜中的轮廓。

contours1, hierarchy1 = cv2.findContours(mask_red, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)  
contours2, hierarchy2 = cv2.findContours(mask_green, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)

7. 检测红色信号灯

遍历红色掩膜中的轮廓,使用boundingRect()函数确定轮廓的边界框,并根据框的大小判断是否为有效的信号灯区域,最后在输入图像上绘制相应的矩形框和文字标签。

for cnt in contours1:(x, y, w, h) = cv2.boundingRect(cnt)if w * h < 20 * 20:  continuecv2.rectangle(img, (x, y), (x + w, y + h), (255, 255, 255), 2)  cv2.putText(img, 'red_light', (x, y - 5), cv2.FONT_HERSHEY_SIMPLEX, 0.6, (0, 0, 255), 2)

8. 检测绿色信号灯

同样,遍历绿色掩膜中的轮廓,进行边界框的绘制和标签添加。

for cnt in contours2:(x, y, w, h) = cv2.boundingRect(cnt)if w * h < 20 * 20:  continuecv2.rectangle(img, (x, y), (x + w, y + h), (255, 0, 0), 2)  cv2.putText(img, 'green_light', (x, y - 5), cv2.FONT_HERSHEY_SIMPLEX, 0.6, (0, 255, 0), 2)

9. 显示结果

利用OpenCV的imshow()函数显示标记后的图像,并通过waitKey()destroyAllWindows()函数控制图像显示窗口的关闭。

cv2.imshow('res', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

四、结果展示


五、完整代码

#!/usr/bin/env python
# -*- coding:utf-8 -*-
"""
@Project : TrafficLights
@File    : test_image.py
@IDE     : PyCharm
@Author  : 半亩花海
@Date    : 2024/04/20 21:45
"""
import cv2
import numpy as npimg = cv2.imread("light1.png")# 指定红色值的范围
minRed = np.array([0, 127, 128])  # 红色阈值下界
maxRed = np.array([10, 255, 255])  # 红色阈值上界
# 指定绿色值的范围
minGreen = np.array([50, 100, 20])
maxGreen = np.array([90, 255, 200])
# BGR -> HSV颜色空间
img_hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
# 确定目标区域
mask_red = cv2.inRange(img_hsv, minRed, maxRed)  # 过滤出红色部分,获得红色的掩膜
mask_green = cv2.inRange(img_hsv, minGreen, maxGreen)  # 获得绿色部分掩膜# 查找轮廓
contours1, hierarchy1 = cv2.findContours(mask_red, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)  # 轮廓检测 红灯
contours2, hierarchy2 = cv2.findContours(mask_green, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)  # 轮廓检测 绿灯# 检测红灯
for cnt in contours1:(x, y, w, h) = cv2.boundingRect(cnt)  # 该函数返回矩阵四个点if w * h < 20 * 20:  # 忽略20*20的框continuecv2.rectangle(img, (x, y), (x + w, y + h), (255, 255, 255), 2)  # 将检测到的颜色框起来cv2.putText(img, 'red_light', (x, y - 5), cv2.FONT_HERSHEY_SIMPLEX, 0.6, (0, 0, 255), 2)
# 检测绿灯
for cnt in contours2:(x, y, w, h) = cv2.boundingRect(cnt)  # 该函数返回矩阵四个点if w * h < 20 * 20:  # 忽略20*20的框continuecv2.rectangle(img, (x, y), (x + w, y + h), (255, 0, 0), 2)  # 将检测到的颜色框起来cv2.putText(img, 'green_light', (x, y - 5), cv2.FONT_HERSHEY_SIMPLEX, 0.6, (0, 255, 0), 2)cv2.imshow('res', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

六、总结

注意事项

  • 确保输入的图像具有足够的清晰度和对比度,以便准确识别红色和绿色信号灯。
  • 可根据实际场景调整代码中的颜色阈值范围以获得更好的检测效果。

通过本项目,可以利用计算机视觉技术实现交通信号灯的自动检测,提高交通管理的效率和准确性。通过调整颜色阈值范围轮廓检测参数,可以适应不同场景下的交通信号灯检测需求。

这篇关于计算机视觉 | 交通信号灯状态的检测和识别的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/928117

相关文章

hdu1043(八数码问题,广搜 + hash(实现状态压缩) )

利用康拓展开将一个排列映射成一个自然数,然后就变成了普通的广搜题。 #include<iostream>#include<algorithm>#include<string>#include<stack>#include<queue>#include<map>#include<stdio.h>#include<stdlib.h>#include<ctype.h>#inclu

hdu1565(状态压缩)

本人第一道ac的状态压缩dp,这题的数据非常水,很容易过 题意:在n*n的矩阵中选数字使得不存在任意两个数字相邻,求最大值 解题思路: 一、因为在1<<20中有很多状态是无效的,所以第一步是选择有效状态,存到cnt[]数组中 二、dp[i][j]表示到第i行的状态cnt[j]所能得到的最大值,状态转移方程dp[i][j] = max(dp[i][j],dp[i-1][k]) ,其中k满足c

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

阿里开源语音识别SenseVoiceWindows环境部署

SenseVoice介绍 SenseVoice 专注于高精度多语言语音识别、情感辨识和音频事件检测多语言识别: 采用超过 40 万小时数据训练,支持超过 50 种语言,识别效果上优于 Whisper 模型。富文本识别:具备优秀的情感识别,能够在测试数据上达到和超过目前最佳情感识别模型的效果。支持声音事件检测能力,支持音乐、掌声、笑声、哭声、咳嗽、喷嚏等多种常见人机交互事件进行检测。高效推

烟火目标检测数据集 7800张 烟火检测 带标注 voc yolo

一个包含7800张带标注图像的数据集,专门用于烟火目标检测,是一个非常有价值的资源,尤其对于那些致力于公共安全、事件管理和烟花表演监控等领域的人士而言。下面是对此数据集的一个详细介绍: 数据集名称:烟火目标检测数据集 数据集规模: 图片数量:7800张类别:主要包含烟火类目标,可能还包括其他相关类别,如烟火发射装置、背景等。格式:图像文件通常为JPEG或PNG格式;标注文件可能为X

计算机毕业设计 大学志愿填报系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点赞 👍 收藏 ⭐评论 📝 🍅 文末获取源码联系 👇🏻 精彩专栏推荐订阅 👇🏻 不然下次找不到哟~Java毕业设计项目~热门选题推荐《1000套》 目录 1.技术选型 2.开发工具 3.功能

智能交通(二)——Spinger特刊推荐

特刊征稿 01  期刊名称: Autonomous Intelligent Systems  特刊名称: Understanding the Policy Shift  with the Digital Twins in Smart  Transportation and Mobility 截止时间: 开放提交:2024年1月20日 提交截止日

状态dp总结

zoj 3631  N 个数中选若干数和(只能选一次)<=M 的最大值 const int Max_N = 38 ;int a[1<<16] , b[1<<16] , x[Max_N] , e[Max_N] ;void GetNum(int g[] , int n , int s[] , int &m){ int i , j , t ;m = 0 ;for(i = 0 ;

基于 YOLOv5 的积水检测系统:打造高效智能的智慧城市应用

在城市发展中,积水问题日益严重,特别是在大雨过后,积水往往会影响交通甚至威胁人们的安全。通过现代计算机视觉技术,我们能够智能化地检测和识别积水区域,减少潜在危险。本文将介绍如何使用 YOLOv5 和 PyQt5 搭建一个积水检测系统,结合深度学习和直观的图形界面,为用户提供高效的解决方案。 源码地址: PyQt5+YoloV5 实现积水检测系统 预览: 项目背景

JavaFX应用更新检测功能(在线自动更新方案)

JavaFX开发的桌面应用属于C端,一般来说需要版本检测和自动更新功能,这里记录一下一种版本检测和自动更新的方法。 1. 整体方案 JavaFX.应用版本检测、自动更新主要涉及一下步骤: 读取本地应用版本拉取远程版本并比较两个版本如果需要升级,那么拉取更新历史弹出升级控制窗口用户选择升级时,拉取升级包解压,重启应用用户选择忽略时,本地版本标志为忽略版本用户选择取消时,隐藏升级控制窗口 2.