深度学习,识别红绿灯

#准备工作,导入所需要的库
import cv2
import numpy as np

#读取视频
cap = cv2.VideoCapture(r"红绿灯.mp4")
#获取帧率
fps = cap.get(cv2.CAP_PROP_FPS)
while cap.isOpened():
    ret, frame = cap.read()
    cv2.namedWindow("frame", 0)  #0可调大小
    cv2.resizeWindow("frame", 960, 540)  #设置长和宽
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)  #将视频以灰度图展示
    cv2.putText(gray, 'fps: ' + str(fps), (0, 50), cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 255, 255), 2)  # 在展示窗口中显示帧率

# 划定三个感兴趣区域分别为R, Y, G
# ROI划定规则:图像矩阵名称[上 : 下, 左 : 右]
    R = gray[452:454, 594:596]
    Y = gray[446:448, 630:632]
    G = gray[444:446, 672:674]

# 为划定的感兴趣区域赋予变量
    sum_R = np.sum(R)
    sum_Y = np.sum(Y)
    sum_G = np.sum(G)

# 判断模块
    if sum_R > 200:
    #如果R中那四个像素点的灰度值之和大于200,则显示红灯
        cv2.putText(frame, 'Red', (580, 400), 2, 2, (0, 0, 255), 3)
        cv2.putText(frame, 'Red', (1460, 650), 2, 2, (0, 0, 255), 3)
        cv2.putText(frame, 'Red', (1230, 670), 2, 2, (0, 0, 255), 3)
    #putText(选定的视频[或赋予其的变量], "要显示的文字", 字体[0为默认], 字体粗细程度, [颜色 BGR](  ,  ,  ,), 字体大小)
    elif sum_Y > 200:
    # 如果Y中那四个像素点的灰度值之和大于200,则显示黄灯
        cv2.putText(frame, 'Yellow', (550, 410), 2, 2, (0, 255, 255), 3)
        cv2.putText(frame, 'Yellow', (1460, 650), 2, 2, (0, 255, 255), 3)
        cv2.putText(frame, 'Yellow', (1230, 670), 2, 2, (0, 255, 255), 3)
    elif sum_G > 200:
    # 如果G中那四个像素点的灰度值之和大于200,则显示绿灯
        cv2.putText(frame, 'Green', (550, 410), 2, 2, (0, 255, 0), 3)
        cv2.putText(frame, 'Green', (1460, 650), 2, 2, (0, 255, 0), 3)
        cv2.putText(frame, 'Green', (1230, 670), 2, 2, (0, 255, 0), 3)
    else:
    # 如果都小于200,则显示等待
        cv2.putText(frame, '', (550, 410), 2, 2, (255, 255, 255), 3)
        cv2.putText(frame, '', (1460, 650), 2, 2, (255, 255, 255), 3)

    cv2.imshow('frame', frame)  # 显示原视频

   # 按 'm' 退出
    if cv2.waitKey(1) & 0xFF == ord('m'):
        break
cap.release()  # 释放