我试图在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/