python 简单方式红绿灯状态识别

import cv2
import numpy as np

cap = cv2.VideoCapture('视频名称.mp4')  #读取视频
fps = cap.get(cv2.CAP_PROP_FPS)  #获取帧率

while cap.isOpened():
    ret, frame = cap.read()
    # 调整窗口大小
    cv2.namedWindow("gray frame", 0)  # 0可调大小,注意:窗口名必须imshow里面的一窗口名一致
    cv2.resizeWindow("gray frame", 960, 540)  # 设置长和宽
    cv2.namedWindow("frame", 0)  # 0可调大小,注意:窗口名必须imshow里面的一窗口名一致
    cv2.resizeWindow("frame", 960, 540)  # 设置长和宽

    cv2.namedWindow("ROIR", 0)  # 0可调大小,注意:窗口名必须imshow里面的一窗口名一致
    cv2.resizeWindow("ROIR", 200, 200)  # 设置长和宽
    cv2.namedWindow("ROIY", 0)  # 0可调大小,注意:窗口名必须imshow里面的一窗口名一致
    cv2.resizeWindow("ROIY", 200, 200)  # 设置长和宽
    cv2.namedWindow("ROIG", 0)  # 0可调大小,注意:窗口名必须imshow里面的一窗口名一致
    cv2.resizeWindow("ROIG", 200, 200)  # 设置长和宽

    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, G, B
    #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 light', (550, 410), 0, 2, (0, 0, 255), 3)
        # 用法   putText(选定的视频[或赋予其的变量], "要显示的文字", 字体[0为默认], 字体粗细程度, [颜色 BGR](  ,  ,  ,), 字体大小)
    elif sum_Y > 200:
        # 如果Y中那四个像素点的灰度值之和大于200,则显示黄灯
        cv2.putText(frame, 'Yellow light', (550, 410), 0, 2, (0, 255, 255), 3)
    elif sum_G > 200:
        # 如果G中那四个像素点的灰度值之和大于200,则显示绿灯
        cv2.putText(frame, 'Green light', (550, 410), 0, 2, (0, 255, 0), 3)
    else:
        # 如果都小于200,则显示等待
        cv2.putText(frame, 'Wait', (550, 410), 0, 2, (255, 255, 255), 3)

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

    #显示三个所划定的感兴趣区域
    cv2.imshow("ROIR", R)
    cv2.imshow("ROIY", Y)
    cv2.imshow("ROIG", G)

    #按 'q' 退出
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

cap.release() #释放
cv2.destroyAllWindows()# 用来删除窗口的,()里不指定任何参数,则删除所有窗口,删除特定的窗口,往()输入特定的窗口值。

你可能感兴趣的:(python,opencv)