3

aviファイルをキャプチャして処理しています。私のコードはしばらく問題なく動作していましたが、ビデオの最後のフレームがキャプチャされた後も停止していないようです。代わりに、ビデオの先頭にループバックし続けます。なぜこれが起こっているのか理解できず、Eclipse や OpenCV に関して何か変更があったとは考えられません。同じビデオを使用して Ubuntu PC で同じコードを試しましたが、問題なく動作します。OSやアプリの再インストールも試しましたが、成功しませんでした。

サンプルコード:

#include "opencv2/opencv.hpp"
using namespace std;
using namespace cv;



int main(int argc, char** argv)
{
Mat frame;
VideoCapture capture;
const string inputVideo = argv[1];


char buff[PATH_MAX];
getcwd( buff, PATH_MAX );
std::string fileName( buff );
fileName.append("/");
fileName.append(inputVideo);


capture.open(inputVideo);

while(true)
{
    capture >> frame;

    if(!frame.empty())
    {
        imshow("frame", frame);
    }
    else
    {
        printf(" --(!) No captured frame -- Break!");
        break;
    }

    int key = waitKey(10);
    if((char)key == 'c')
    {
        break;
    }
}

return 0;
}

これを Mac OS X (10.8.2)、Eclipse Juno、および OpenCV 2.4.3 で実行しています。

アドバイスやコメントをお待ちしております。前もって感謝します

4

2 に答える 2

2

私が使用したソリューションは@G Bによってコメントとして投稿されました.1つとしてマークされるようにソリューションを作成しています。

capture.get(CV_CAP_PROP_POS_FRAMES)フレーム グラビングの前後に使用しました。「after」の値が「before」の値よりも小さい場合は、ビデオの最後に到達しています。

于 2014-11-05T15:33:18.423 に答える
1

以下のようにフレーム数を取得します。

int frameCnt = capture.get(CV_CAP_PROP_FRAME_COUNT);

そして、フレーム数が超えたときにループを終了するようにチェックします..

于 2014-11-05T07:23:37.200 に答える