OpenCV显示编码在I420中的avi文件



我正试图使用OpenCV 2.4.2(在Windows 7上的Visual C++2010学习版中)编写视频处理应用程序,但在显示某些AVI文件时遇到问题。大多数显示正确,但当我使用以I420格式编码的AVI文件时,我得到的只是每帧的条纹粉红色图像(它在常规媒体播放器中正确显示)。

显示的输出:https://i.stack.imgur.com/f15hM.png

目前,我正在使用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/)。

好的,所以我设法在另外几台计算机上进行了测试。一台刚刚坠毁,在另一台上,视频播放得很好。事实证明,在默认的OpenCV编译中启用FFMPEG存在未压缩AVI问题。在禁用FFMPEG的情况下重新编译OpenCV,或者只使用不同的编解码器来压缩视频。

最新更新