我正在尝试使用OpenCV来编写视频文件。我有一个简单的程序,从视频文件加载帧然后接受保存它们
首先,cvCreateVideoWrite始终返回NULL。我从你的小组那里得到了一个答案,说它返回单独的图像,并尝试将文件名更改为test0001.png,这很有效。
但是现在cvWriteFrame函数总是失败,代码是
CString path;
path="d:\\mice\\Test_Day26_2.avi";
CvCapture* capture = cvCaptureFromAVI(path);
IplImage* img = 0;
CvVideoWriter *writer = 0;
int isColor = 1;
int fps = 25; // or 30
int frameW = 640; // 744 for firewire cameras
int frameH = 480; // 480 for firewire cameras
writer=cvCreateVideoWriter("d:\\mice\\test0001.png",CV_FOURCC('P','I','M','1'),
fps,cvSize(frameW,frameH),isColor);
if (writer==0)
MessageBox("could not open writter");
int nFrames = 50;
for(int i=0;i<nFrames;i++){
if (!cvGrabFrame(capture))
MessageBox("could not grab frame");
img=cvRetrieveFrame(capture); // retrieve the captured frame
if (img==0)
MessageBox("could not retrive data");
if (!cvWriteFrame(writer,img) )
MessageBox("could not write frame");
}
cvReleaseVideoWriter(&writer);
答案 0 :(得分:1)
尝试CV_FOURCC('D', 'I', 'V', 'X')
,CV_FOURCC('f', 'f', 'd', 's')
(*.avi
文件名}或CV_FOURCC_DEFAULT
(*.mpg
)。在opencv&gt; _&gt;
答案 1 :(得分:0)
我在OpenCV中看过很多关于编写视频的问题。我发现英特尔iYUV格式能够很好地满足我的需求。
答案 2 :(得分:0)
您的图书馆是否已定义HAVE_FFMPEG
?
如果不是,您可能需要使用该选项重新编译opencv。您应该在配置步骤中看到类似的内容:
...
Video I/O--------------
Use QuickTime no
Use xine no
Use ffmpeg: yes
Use v4l yes
...
如果您没有ffmpeg,可以从here获取。