2017-09-26 8 views
0

RTSPフィードから指定された時間に個々のフレームを取得しようとしています。OpenCV(Python)read()が呼び出されたときにフレームを更新しない

これは、ビデオストリーミングのために正常に動作します:

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

さて、私はcv2.waitKey(1000)をtime.sleep(1)に置き換えてもいいですか?私は何も見せたくない、ちょうど1秒待つことを望む。 – 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) 
関連する問題