0

私は ffmpeg をサポートする opencv をビルドします。これは、ビデオを読み取り、フレームを反復処理するコードのスニペットです。

if (argc != 3) {
    std::cout<<"Usage: exe input_video_filename skip_frames \n"<<std::endl;
    return 0;
}
char* video_fn = argv[1];
int skip_frames = atoi(argv[2]);
VideoCapture cap;
if(!cap.open(video_fn))
{
    std::cout<<"error reading video"<<video_fn<<std::endl;
    return -1;
}
Mat frame,gray;
int i = 0;
double score = 0;
vector<double> scores;
while(true)
{
    if(!**cap.retrieve(frame)**)
    {
        std::cout<<"error retrieve frame"<<std::endl;
        break;
    }
    if(i%skip_frames)
    {
        cvtColor(frame,gray,CV_BGR2GRAY);
        double sc = compute_cpbdm(gray);
        std::cout<<sc<<std::endl;
        scores.push_back(sc);
    }

}

プログラムは行 cap.open(video_fn) でビデオの読み取りに成功しますが、行 if(!cap.retrieve(frame)) で VideoCapture からフレームを取得できません。mp4 と avi で試しましたが、常に失敗します。同様の問題が発生した人はいますか? それを解決する方法は?どうもありがとう!

4

1 に答える 1

2

を使用している場合、その前capture.retrieve(frame)に a があるはずです。capture.grab()

または、次のこともできます。capture.read(frame) これは、両方を同時に行います。

または単にcapture >> frame;(読んだのと同じこと)

于 2013-02-20T10:19:28.417 に答える