2017-09-26 71 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) 
相關問題