使用opencv

时间:2016-05-20 07:14:27

标签: python opencv video-streaming video-editing

我使用OpenCV 3.1.0从ip camera HikVision 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.grab()cap.retrieve()的分析结果或 cap.retrieve()执行的平均时间过长时,会显示任一帧异常值。

该功能是 frames.append(img.copy())的时间稳定且可忽略不计(1-5 ms)。同时,由于img references to memory of the cap img.copy()似乎以某种方式影响 cap 对象的进入状态。

仅在高分辨率下发生,并非总是如此。

我的硬件:32GB RAM,Inter Core i7 x 12

有什么想法吗?

0 个答案:

没有答案