Python 使用opencv的高分辨率实时流媒体

Python 使用opencv的高分辨率实时流媒体,python,opencv,video-streaming,video-editing,Python,Opencv,Video Streaming,Video Editing,我使用OpenCV 3.1.0从ip摄像头海康威视DS-2CD2432F-IW(rtsp,h264)捕获实时视频流,分辨率为2048x1536,rps 20。我想缓冲几帧。下面是我的分析代码: import cv2 cap = cv2.VideoCapture('rtsp://login:psw@xxx.xxx.xxx.xxx/Streaming/Channel/1') frames = [] while cap.isOpened(): cap.grab() img_succes

我使用OpenCV 3.1.0从ip摄像头海康威视DS-2CD2432F-IW(rtsp,h264)捕获实时视频流,分辨率为2048x1536,rps 20。我想缓冲几帧。下面是我的分析代码:

import cv2
cap = cv2.VideoCapture('rtsp://login:psw@xxx.xxx.xxx.xxx/Streaming/Channel/1')
frames = []
while cap.isOpened():
    cap.grab()
    img_success, img = cap.retrieve()

    if img_success:
        frames.append(img.copy())

    frame_i += 1
    if frame_i == 200:
        break
问题在于调用frames.append(img.copy())的过程中

如果这一行被注释-一切正常

如果否-有时(!)cap对象的行为不清楚。分析结果中显示的帧异常值,或cap.retrieve()执行的平均时间过长

其特点是frames.append(img.copy())的计时是稳定的,可以忽略不计(1-5毫秒)。同时,似乎img.copy()对cap对象的入口状态产生了某种影响,因为

它只在高分辨率下出现,并不总是如此

我的硬件:32GB RAM,核心间i7 x 12


有什么想法吗?

你的问题是在frames.append(img.copy())还是在cap.retrieve()中?如果内存被交换(您正在缓冲大量数据),第一个可能来自您的文件系统,第二个可能是您的硬件平台的解码速度。您的200个图像是1.75 GBHi Mika。我根据你的笔记更新了我的问题。我在任何地方检查了空闲内存,发现内存不足。我现在正在验证这个假设。