2016-03-30 24 views
1

OpenCVでドロップフレームを検出する方法はありますか?今、私のようなチェックをしています次:OpenCVでフレームドロップを検出する

int main() { 
    VideoCapture cap(-1); 
    if (!cap.isOpened()) { 
     cout << "Webcam is not open." << endl; 
     return -1; 
    } 

    Mat frame; 

    while (true) { 
     cap.read(frame); 

     if (!frame.empty()) { 
      imshow("frame", frame); 
     } 
     else { 
      cout << "No captured frame" << endl; 
      break; 
     } 
    } 
} 

しかし、私はまだメッセージが言ってもらう「カメラのフレームがドロップされました!」私の "キャプチャされたフレームなし"のメッセージなし。どのような条件でカメラフレームがドロップされるのか/どのようにそれらの状態をチェックできますか?

+0

このメッセージは、ドライバまたは基本となるライブラリからのメッセージですか?あなたの処理はあなたのカメラのfpsより遅いでしょうか?その結果、フレームがドロップされる(要求されたフレームが古すぎる)場合があります。その場合、カメラは代わりに新しいフレームを配信します。 – Micka

答えて

0

このopencv関数cap.get(CV_CAP_PROP_POS_MSEC)を使用すると、ビデオフレームのプレゼンテーションタイムスタンプを取得できます。この関数は、時間間隔の倍数で整数を返します。フレームがドロップした場合、タイムスタンプは(N + 1)* time_intervalの代わりに(N + 2)* time_intervalにスキップされます。ここで、Nは現在のフレーム番号です。