最近一个项目,要用python读取30个海康摄像头的rtsp流,一开始直接用cv2.VideoCapture(video_path),结果运行一段时间后发现读出来的frame经常出现花屏的现象。所以通过两种方式对程序进行了修改。
1、我先是通过cap.set(cv2.CAP_PROP_BUFFERSIZE, 3)设置缓冲区大小可能有助于减少丢帧现象。代码如下:
import cv2 # 导入 OpenCV 库,用于处理计算机视觉和视频流相关的功能。
# 设置 RTSP 视频流的路径(用户名、密码、IP 地址和视频流的 URL)。
video_path = 'rtsp://admin:123456@192.168.3.101/Streaming/Channels/1'
# 使用 cv2.VideoCapture 打开 RTSP 视频流,cap 是一个视频捕获对象。
cap = cv2.VideoCapture(video_path)
# 设置视频流缓冲区的大小,减少延迟,CAP_PROP_BUFFERSIZE 设置为 3 表示缓冲区大小为 3 帧。
cap.set(cv2.CAP_PROP_BUFFERSIZE, 3)
# 检查视频流是否成功打开并且继续读取帧。cap.isOpened() 返回 True 表示视频流打开成功。
while cap.isOpened():
# 读取视频流中的一帧。返回值 success 表示读取是否成功,frame 为读取到的图像帧。
success, frame = cap.read()
# 如果成功读取到帧,则显示该帧。
if success:
# 使用 OpenCV 显示读取到的视频帧,"SHOW" 为窗口名称,frame 为图像数据。
cv2.imshow("SHOW", frame