我正在尝试使用 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)。我觉得这很奇怪,因为在这个网站上的大多数答案和网络上的资源中,他们明确建议使用 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/)。