在 OpenCV 中播放 AVI 文件

Posted

技术标签:

【中文标题】在 OpenCV 中播放 AVI 文件【英文标题】:Playing AVI files in OpenCV 【发布时间】:2010-07-15 03:05:47 【问题描述】:

我似乎无法使用 OpenCV 播放我的 avi 文件。我在 Mac 上,文件与 Quicktime 和 VLC 播放器一起使用。我曾尝试使用 mencoder 将其转换为 i420,但仍未成功。没有出现错误消息,似乎程序自动关闭,我不知道如何调试它。

int main(int argc, char* argv[]) 

    cvNamedWindow( "Example2", CV_WINDOW_AUTOSIZE );
    CvCapture* capture = cvCreateFileCapture( argv[1] );
    IplImage* frame;
    while(1) 
        frame = cvQueryFrame( capture );
        if( !frame ) break;
        cvShowImage( "Example2", frame );
        char c = cvWaitKey(33);
        if( c == 27 ) break;
    
    cvReleaseCapture( &capture );
    cvDestroyWindow( "Example2" );

【问题讨论】:

当您在调试器中单步执行它时,它在哪里中止? 它什么也没说。它只是正常退出。 您确定作为命令行参数提供的文件名正确吗?尝试添加检查以确保文件确实存在。如果不是,则产生错误。 我会加一张支票看看。谢谢! 【参考方案1】:

好吧,由于您的代码缺少错误检查,因此 cvCreateFileCapture() 可能存在问题,直到您检查函数的返回时您才会知道。

无论如何,您应该在此处删除或添加此语句的调试:

if( !frame ) break;

因为如果在检索文件的第一帧时出现问题,您的应用程序会简单地放弃并静默退出,给您“什么都没有发生”的感觉。

将其更改为:

if (!frame)  printf("Uow, huge fail!\n"); break;

但最重要的是:你为什么不使用 cvCaptureFromAVI() ? 看看这个:http://nashruddin.com/How_to_Play_AVI_Files_with_OpenCV

【讨论】:

我也尝试过这种方法,但我肯定会把调试信息放进去看看。谢谢! 我遇到了同样的问题。未正确检索第一帧。但是,我使用教科书提供的test.avi和tree.avi文件进行测试。这里有什么问题? 我不知道@Kalla。我得看看你的源代码。很多事情可能是错误的。问一个问题,然后用我的名字发表评论,这样我就可以关注你了。

以上是关于在 OpenCV 中播放 AVI 文件的主要内容,如果未能解决你的问题,请参考以下文章

opencv 提取avi视频中的帧,逐帧播放

openCV1.0 播放AVI视频并实现进度条

学习OpenCV(中文版)的作品目录

在 OpenCV 中编写 AVI 文件

关于opencv读取图片、视频总是窗口一闪不出图、视频的问题

如何在 Java 中使用 openCV 的 VideoCapture 方法打开和处理 .mpeg 或 .avi 等视频文件