2

OpenCV 2.4.2 (Windows 7 の Visual C++ 2010 Express) を使用してビデオ処理アプリケーションを作成しようとしていますが、特定の AVI ファイルの表示に問題があります。ほとんどは正しく表示されますが、I420 形式でエンコードされた AVI ファイルを使用すると、フレームごとに縞模様のピンク色の画像しか表示されません (通常のメディア プレーヤーでは正しく表示されます)。

表示される出力: http://i.imgur.com/BOu6c.png?1

現在、私は C++ API を使用していますが、C API を使用すると同じことが起こります (このページのコード: http://nashruddin.com/how_to_play_avi_files_with_opencv )。このサイトのほとんどの回答と Web 上のリソースでは、I420 エンコーディングの使用が明示的に推奨されているため、これは奇妙だと思います。これを引き起こしている可能性のあるもの、またはそれを修正する方法を誰かが知っていますか?

これは、私が使用しているコードの縮小版です。

int main(int argc, char** argv){
string fname = "test.avi";
VideoCapture capture(fname);
if(!capture.isOpened()){
    cerr << "error opening " << fname << endl;
    return -1;
}

Mat frame;
namedWindow("output");
double rate = capture.get(CV_CAP_PROP_FPS);
int delay = 1000/rate;
while(true){
    if(!capture.read(frame)) break;
    cv::imshow("output", frame);
    if(waitKey(delay) >= 0) break;
}
capture.release();

return 0;
}

それが違いを生む場合、私が使用しているのはOpenCVのコンパイル済みバージョンです(http://sourceforge.net/projects/opencvlibrary/)。

4

1 に答える 1

0

わかりましたので、さらにいくつかのコンピューターでテストすることができました。1 つはクラッシュしただけで、もう 1 つはビデオが正常に再生されました。デフォルトの OpenCV コンパイルで有効になっている FFMPEG に問題があり、圧縮されていない AVI に問題があることが判明しました。FFMPEG を無効にして OpenCV を再コンパイルするか、別のコーデックを使用してビデオを圧縮します。

于 2012-10-01T03:31:54.383 に答える