我试图在Mandriva Linux 2009.1下使用openCV保存视频文件。
不幸的是,尽管我可以看到并修改mpeg字段,但是cvCreateVideoWriter始终返回null,换句话说,cvCaptureFromCam,cvCaptureFromAvi,cvRetrieveFrame都在工作。

我尝试了此tutorial和此codec page中所有可能的编解码器。我还尝试对Fourcc参数中的未压缩avi尝试0以及对选择框-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);

可能是什么问题呢?

最佳答案

这将取决于您的OpenCV库的配置方式。特别是,我相信必须定义HAVE_FFMPEG才能处理“IYUV” FOURCC值。是否定义了使用HAVE_FFMPEG构建的库?

默认的writer对象(在fourcc为零或没有通过可用的处理程序之一处理fourcc值时创建)创建每帧图像文件。在这种情况下,文件名必须类似于“file%04d.foo”或“file0001.foo”,否则编写器创建将失败。您可以尝试为filename参数传递诸如“test0001.png”之类的内容作为实验,以验证是否成功创建了默认图像编写器(这不会直接帮助您,但是可能是一种确认您的fourcc值未被使用的方法由可用作家认可。)

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

关于video - openCV cvCreateVideoWriter始终返回null,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/903753/

10-12 03:43