当前位置: 代码迷 >> 综合 >> 基于opencv的红绿灯检测(python)
  详细解决方案

基于opencv的红绿灯检测(python)

热度:96   发布时间:2024-03-07 10:59:02.0

基于opencv的红绿灯检测(python)

背景

交通信号灯的检测与识别是无人驾驶与辅助驾驶必不可少的一部分,其识别精度直接关乎智能驾驶的安全。一般而言,在实际的道路场景中采集的交通信号灯图像具有复杂的背景,且感兴趣的信号灯区域只占很少的一部分。针对这些难点,国内外的众多研究者提出了相应的解决方案。总的来说,大多基于传统的图像处理方法;但目前也有用强学习能力的卷积神经网络去进行识别,但这类方法往往需要大量的训练样本避免过拟合的风险。截至目前的大多数方法都是在各种颜色空间中利用信号灯颜色的先验进行分割得到兴趣区域,然后再通过信号灯所特有的形状特征和角点特征等进行进一步的判定。比如,Masako Omachi等人提出在RGB色彩空间分割交通信号灯,使用HOUGH变换检测分割出的信号灯所在的圆形区域;徐成等提出在Lab色彩空间分割交通信号灯,使用模板匹配的方法识别交通信号灯的状态;谷明琴等则在HSV色彩空间中使用颜色直方图统计图像的H分量,确定交通信号灯的类型。本项目将基于传统的图像处理算法来进行交通信号灯的识别,重点介绍核心技术。

正如前面所述,道路场景的多变性与复杂性,使得如何快速、准确地检测与识别交通信号灯,并且有效滤除图像中的干扰区域是交通信号灯检测与识别的关键。在图像处理算法设计中,为了提高算法的准确性与时效性,一般只关注局部感兴趣区域而不是整个图像区域。鉴于此,提出一种基于颜色分割与特征匹配相结合的方法,主要分为如下三个步骤:

1) 颜色分割

为了消除噪声,光照等因素的干扰,首先对采集的图像进行直方图均衡化。即:对每一个通道(R,G,B)数据进行直方图均衡化,再合并为一个3通道图像。颜色特征是交通信号灯重要而显著的特征之一。要对交通信号灯进行颜色分割,首先要选择合适的色彩空间。RGB色彩空间中的R、G、B这3个分量之间相关性较高,受光照影响较大,不利于颜色分割。因此,对RGB这3个通道数据进行归一化,即R=R./(R+G+B),G=G./(R+G+B),B=B./(R+G+B),然后,统计了不同环境条件下拍摄的交通信号灯的红色、绿色的R,G,B值,确定交通信号灯的颜色阈值。

2) 感兴趣区域提取

该步骤的主要目的为对分割的红色通道图像和绿色通道图像,进行联通区域的标定,并提取区域的基本几何特征,比如长度,宽度,长宽比,面积(即白色像素个数)。

3) 信号灯区域判定与识别

该步骤在前一步骤的基础上根据信号灯的特有特征过滤出真正的信号灯区域。本技术使用了3个先验知识:信号灯面积;信号灯形状;信号灯的黑色边框。

这篇博客介绍的是通过色彩空间识别交通灯。

1、导入相关库

import cv2
import os
import glob
import random
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
%matplotlib inline

import cv2:导入opencv相关库。

import os:我们在python下写程序,需要对文件以及文件夹或者其他的进行一系列的操作。但是,我们怎么在python中对文件进行操作呢?这就引入了os模块了。

import glob:glob是python自带的一个文件操作相关模块,用它可以查找符合自己目的文件。

import random:随机模块

import numpy as np:numpy科学数据库

import matplotlib.pyplot as plt:画图所需的matplotlib。

import matplotlib.image as mpimg:用mpimg导入图片得到的即为三通道数组,直接用plt显示即可。

%matplotlib inline: 可以在编译器里直接使用,功能是可以内嵌绘图,并且可以省略掉plt.show()这一步。

2、数据集的准备

数据采用的是MIT自动驾驶课程的图像,总共三类:红绿黄,1187张图片,其中,723张红色交通灯图片,429张绿色交通灯图片,35张黄色交通灯图片,图片分为测试集和训练集。

图像数据集链接

获取数据集地址:

# Image data directories
IMAGEDIR_TRAINING = "E:\\car\\traffic_light_classify-master\\traffic_light_classify-master\\traffic_light_images\\training\\"
IMAGE_DIR_TEST = "E:\\car\\traffic_light_classify-master\\traffic_light_classify-master\\traffic_light_images\\test\\"

 加载图像数据及图像标签

image_dir:图像存储位置的说明

#load data
def load_dataset(image_dir):im_list =[]image_types= ['red','yellow','green']#Iterate through each color folderfor im_type in image_types:file_lists = glob.glob(os.path.join(image_dir,im_type,'*'))print(len(file_lists))for file in file_lists:im = mpimg.imread(file)if not im is None:im_list.append((im,im_type))return im_list
IMAGE_LIST = load_dataset(IMAGEDIR_TRAINING)

结果:

723
35
429

3、数据可视化

 

致谢

红绿灯检测应用

转 opencv红绿灯检测

一个好博客的诞生总是需要一点时间的,明天继续!

 

  相关解决方案