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

好的,所以我设法在更多的计算机上进行了测试。一个刚刚崩溃,另一个,视频播放正常。事实证明,在默认 OpenCV 编译中启用 FFMPEG 是一个问题,而未压缩的 AVI 存在问题。在禁用 FFMPEG 的情况下重新编译 OpenCV,或者只使用不同的编解码器来压缩视频。

于 2012-10-01T03:31:54.383 回答