2016-10-04 7 views
0

私は、このコードが実行されたときの結果を期待しています。毎秒1フレームが得られます。私は毎秒そのフレームを取得します。 (opencv)

しかし、キャップバッファが存在する可能性があるので、フレームがカットされません。

このフレームは連続しています。

私は(1秒フレーム後)のフレームを得るために、一つのフレームを獲得し、1秒後にしたい

問題は何ですか?

VideoCapture cap(0) ; 
while(1){ 
    cap >> frame ; 
    sleep(1) ; 
    imshow("test", frame) ; 
    if(waitKey(30)>=0) break ; 
} 
+0

私はおそらくそこに、このようなバッファがあり、あなたはそれを自分で変更することはできませんラズベリーPI3とpicam –

+0

を使用します。http://answers.opencv.org/question/90583/videocapture-buffer/ – Micka

答えて

0

バッファはあなたがwaitKeyを使用してフレームをスキップすることはできませんので、これはトリッキーですが...これはあなたの現在のコードは、限り、あなたが指定して待つことを意味します、そしてすぐに次のフレームを表示遅延後のものではありません。

ただし、t = {1sec、2sec ...}のフレームだけを表示したい場合は、次のようにgetTickCount()関数とgetTickFrequency()関数を使用して自分でタイマーを生成できます。

VideoCapture cap(0) ; 
int t=getTickCount()/getTickFrequency();//at the starting of loop 
while(1){ 
    cap >> frame ; 
    //sleep(1); 
    if(getTickCount()/getTickFrequency()-t>=1000){//in milliseconds 
    //here getTickCount() is constantly updated, but t is fixed till you reset it 
      imshow("test", frame) ; 
      t=getTickCount()/getTickFrequency();//reset the difference back to 0 
    } 
    if(waitKey(30)>=0) 
    break ; 
} 
関連する問題