调用read()时,OpenCV(Python)不更新帧

时间:2017-09-26 22:10:33

标签: python opencv rtsp

我正在尝试从RTSP Feed中指定时间拉出单个帧。

这适用于视频流:

vcap = cv2.VideoCapture(RTSP_URL)

while(1):
    ret, frame = vcap.read()
    cv2.imshow('VIDEO', frame)
    cv2.waitKey(1)

但是如果我想每秒拍摄一张照片并通过这样的方式保存它:

vcap = cv2.VideoCapture(RTSP_URL)

for t in range(60):
    ret, frame = vcap.read()
    if ret:
        cv2.imwrite("{}.jpg".format(t), frame)
    time.sleep(1);

每张图片看起来与第一张图片完全一样。在每个实例中,ret == True。

(一周前这对我来说还不错,然后ipython做了一些需要我重新安装的东西)

2 个答案:

答案 0 :(得分:1)

如果您没有使用cv2.waitKey(1000)显示图片,

cv2.imshow()将无法执行任何操作。尝试:

vcap = cv2.VideoCapture(RTSP_URL)

for t in range(60):
    ret, frame = vcap.read()
    cv2.imwrite('{}.jpg'.format(t), frame)

    # this will activate the waitKey funciton
    cv2.imshow('preview', frame)
    cv2.waitKey(1000)

另一方面,iPython / jupyter并不能很好地使用cv2的imshow和整个GUI功能。例如,如果你不能通过按键打破循环

if (cv2.waitKey(1000) == 27 & 0xff): break;

答案 1 :(得分:0)

好吧,在过去几天无休止地搞乱之后,无论出于什么原因,1秒的速度都不够快。

这将有效:

vcap = cv2.VideoCapture(RTSP_URL)

for t in range(60):
    ret, frame = vcap.read()
    if ret and t % 1000 == 0:
        cv2.imwrite("{}.jpg".format(t), frame)
    time.sleep(0.001)