(附代码)基于Python对交通路口的红绿灯进行颜色检测

1、导入所需要的库

import cv2
import numpy as np

2、视频读取

首先把视频读取进来,可根据自己所使用的视频,用resize调整视频的分辨大小

cap = cv2.VideoCapture('红绿灯.mp4')
while True:
    ret,frame = cap.read()
    if ret == False:
        break
    frame=cv2.resize(frame,(1720,800))

imshow()(如下图所示)

(附代码)基于Python对交通路口的红绿灯进行颜色检测_第1张图片

 3、截取roi区域

roiColor=frame[300:450,450:700]

截取roi的区域,也就是说,为了避免多余的干扰因素我们要把红绿灯的位置给截取出来(如下图所示

(附代码)基于Python对交通路口的红绿灯进行颜色检测_第2张图片

截取后的roi(如下图所示) 

 4、转换hsv颜色空间

hsv = cv2.cvtColor(roiColor,cv2.COLOR_BGR2HSV)

5、二值图像颜色判定

因为图像是二值的图像,所以如果图像出现白点,也就是255,那么就取他的max最大值255,视频帧的不断变化然后遍历每个颜色值

​
red_color = np.max(red_blur)
green_color = np.max(green_blur)
if red_color == 255:
    print('red')
elif green_color == 255:
    print('green')

​

6、颜色结果画在图像上

用矩形框来框选出红绿灯区域

cv2.rectangle(frame,(515,310),(630,360),(0,0,255),2) #按坐标画出矩形框
        cv2.putText(frame, "red", (450, 300), cv2.FONT_HERSHEY_COMPLEX, 1, (0, 0, 255),2)#显示red文本信息

(附代码)基于Python对交通路口的红绿灯进行颜色检测_第3张图片

7、完整代码

#导入库
import cv2
import numpy as np
#导入图像
cap = cv2.VideoCapture('红绿灯.mp4')
while True:
    ret,frame = cap.read()
    if ret == False:
        break
    frame=cv2.resize(frame,(1720,800))
    #截取指定区域
    roiColor=frame[300:450,450:700]
    #转换hsv颜色空间
    hsv = cv2.cvtColor(roiColor,cv2.COLOR_BGR2HSV)

    ##red
    lower_hsv_red = np.array([157,177,122])
    upper_hsv_red = np.array([179,255,255])
    mask_red = cv2.inRange(hsv,lowerb=lower_hsv_red,upperb=upper_hsv_red)
    #中值滤波
    red_blur = cv2.medianBlur(mask_red, 7)
    #green
    lower_hsv_green = np.array([49,79,137])
    upper_hsv_green = np.array([90,255,255])
    mask_green = cv2.inRange(hsv,lowerb=lower_hsv_green,upperb=upper_hsv_green)
    #中值滤波
    green_blur = cv2.medianBlur(mask_green, 7)

    #因为图像是二值的图像,所以如果图像出现白点,也就是255,那么就取他的max最大值255
    red_color = np.max(red_blur)
    green_color = np.max(green_blur)
    #在red_color中判断二值图像如果数值等于255,那么就判定为red
    if red_color == 255:
        print('red')
        cv2.rectangle(frame,(515,310),(630,360),(0,0,255),2) #按坐标画出矩形框
        cv2.putText(frame, "red", (450, 300), cv2.FONT_HERSHEY_COMPLEX, 1, (0, 0, 255),2)#显示red文本信息
    #在green_color中判断二值图像如果数值等于255,那么就判定为green
    elif green_color == 255:
        print('green')
        cv2.rectangle(frame,(515,310),(630,360),(0,255,0),2)
        cv2.putText(frame, "green", (450, 300), cv2.FONT_HERSHEY_COMPLEX, 1, (0, 255, 0),2)

    cv2.imshow('frame', frame)
    red_blur = cv2.resize(red_blur,(300,200))
    green_blur = cv2.resize(green_blur,(300,200))
    cv2.imshow('red_widow',red_blur)
    cv2.imshow('green_window', green_blur)


    c=cv2.waitKey(1)
    if c==27:
        break

检测红灯的效果(如下图所示)

(附代码)基于Python对交通路口的红绿灯进行颜色检测_第4张图片

 检测绿灯的效果(如下图所示)

(附代码)基于Python对交通路口的红绿灯进行颜色检测_第5张图片

你可能感兴趣的:(python,人工智能,深度学习)