2017-09-26 69 views
0

我试图从RTSP提要中的指定时间提取单个帧。当读取()被调用时,OpenCV(Python)不更新帧

这工作正常视频流:

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都做了,需要我做了重新安装)

+0

你的意思是'cv2.imwrite( 't.jpg',帧)'? – zindarod

+0

^^对不起,我修好了......我一直在不同的图书馆之间移动。但我在我的实际代码中有cv2.imwrite()。 – theastrocat

+0

你不想在每次迭代中改变图像't.jpg'的名称,因为它被覆盖。 –

回答

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; 
+0

好的,以及如果我用time.sleep(1)替换cv2.waitKey(1000)?我不想展示任何东西,只想等一秒钟。 – theastrocat

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) 
相关问题