需要读取视频流识别红绿灯的亮起情况并说明亮灯颜色 程序完成后发现只能读取初始帧的视频信息,视频后续部分无法读取,不清楚具体是什么原因
使用的软件是pycharm python解释器版本为3.7

import cv2
import numpy as np
cap = cv2.VideoCapture('hldeng.mp4') #读取视频
while cap.isOpened():
ret, frame = cap.read()
cv2.namedWindow("frame", 0) # 0可调大小,注意:窗口名必须imshow里面的一窗口名一致
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) # 转为灰度视频
thresh = cv2.threshold(gray, 160, 255, cv2.THRESH_BINARY)[1]#二值化处理
R = gray[299:311, 475:483]
Y = gray[293:301, 626:630]
G = gray[283:292, 758:771]
sum_R = np.sum(R)
sum_Y = np.sum(Y)
sum_G = np.sum(G)
if sum_R == 0:
# 如果R中那四个像素点的值之和=0,则显示红灯
cv2.putText(frame, 'Red light', (100, 100), 0, 2, (0, 0, 255), 3)
# 用法 putText(选定的视频[或赋予其的变量], "要显示的文字",
# 要显示的文字的位置坐标( , ), 字体[0为默认], 字体粗细程度, [颜色 BGR]( , , ,), 字体大小)
elif sum_Y == 0:
cv2.putText(frame, 'Yellow light', (100, 100), 0, 2, (0, 255, 255), 3) # 如果Y中那四个像素点的值之和=0,则显示黄灯
elif sum_G == 0:
cv2.putText(frame, 'Green light', (100, 100), 0, 2, (0, 255, 0), 3) # 如果G中那四个像素点的值之和=0,则显示绿灯
cv2.imshow('frame', frame) # 显示处理后的原视频
cv2.waitKey(10)