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/)。