openCV cvCreateVideoWriter始终返回null

时间:2009-05-24 13:22:41

标签: video opencv avi

我正在尝试使用Mandriva Linux 2009.1下的openCV保存视频文件。 不幸的是cvCreateVideoWriter总是返回null,虽然我可以看到并修改它们和mpeg fiels,换句话说cvCaptureFromCam,cvCaptureFromAvi,cvRetrieveFrame正在工作。

我尝试了此tutorial和此编解码器page中的所有可能编解码器。我也为未压缩的avi尝试了0,对于fourcc参数中的选择框也尝试了-1,但没有选择弹出,也没有发生任何事情。我还将isColor修改为0。

我在工作目录中也有写权限。

以下是相关的代码段:

    CvVideoWriter *writer = 0;
    int isColor = 1;
    int fps = 25;
    int frameW = 640;
    int frameH = 480;


    if( argc == 1 || (argc == 2 && strlen(argv[1]) == 1 && isdigit(argv[1][0])))
        capture = cvCaptureFromCAM( argc == 2 ? argv[1][0] - '0' : 0 );
    else if( argc == 2 ) {
        printf("argc == 2 :%s:\n", argv[1] );
        capture = cvCaptureFromFile( argv[1] );
    }

    cvInitSystem(argc,argv);

 writer = cvCreateVideoWriter("out.avi",CV_FOURCC('I','Y','U','V'),fps,cvSize(frameW,frameH),isColor);

可能是什么问题?

2 个答案:

答案 0 :(得分:1)

这取决于您的OpenCV库的配置方式。特别是我认为必须定义HAVE_FFMPEG才能处理'IYUV'FOURCC值。您的图书馆是否已定义HAVE_FFMPEG

默认编写器对象(在fourcc为零时创建,或者四个值不由其中一个可用处理程序处理)每帧创建一个图像文件。在这种情况下,文件名必须是“file%04d.foo”或“file0001.foo”,否则编写器创建失败。您可以尝试将文件名参数之类的“test0001.png”传递给实验,以验证是否已成功创建默认图像编写器(这不会直接帮助,但可能是确认您的fourcc值不存在的方法被一位可用的作家认可。)

根据文档,当fourcc等于-1时,打开选择对话框的选项是特定于Windows的。

答案 1 :(得分:1)

我看了你的帖子,Lance的回复以及你对它的评论,然后终于找到了自己的解决方法,并决定为那些在这个问题上苦苦挣扎的人添加一些笔记。

首先要检查的是CMake是否使用FFmpeg构建了OpenCV。我执行此操作的快速而可怕的方法就是使用标志和参数运行cmake,就像在安装期间编写它们一样。在输出结束时,将有关于将安装哪些组件的日志。如果您的参数复制了实际安装过程中使用的参数,您将获得有关已经安装的信息。

接下来,您可能需要检查Linux系统上编解码器的可用编码器和解码器。我是通过使用ffmpeg -codecs来完成的。

第三个注释是为cvCreateVideoWriter设置的可靠且原始的参数:

  

“a0000.png”,0,fps,size,0

fpssize这里是分别包含fps和frame_size字段值的变量。你会得到一袋照片--Lance Richardson和rics已经注意到了。

最后,对于我的系统,安装了FFmpeg和XVID编码器的OpenCV,我将这些参数插入cvCreateVideoWriter

  

“/ home / me / openCVOut / a.avi”,CV_FOURCC('X','V','I','D'),fps,size

最后得到我想要的东西。

希望我的答案有用!