为什么此代码不会将任何数据写入输出文件以使用opencv创建影片

时间:2013-05-24 14:32:20

标签: c++ opencv avi

我正在尝试使用一组大型原始图像创建一些视频。

代码如下:

int imageWidth=687;
int imageHeight=916;
int fps=3;
int ex=-1;
CvSize size = cvSize(imageWidth,imageHeight);
VideoWriter outputVideo; 
outputVideo.open(MovieOutput, ex, fps, size, true);
if(outputVideo.isOpened())
{
    cout << "error opening output video";
}
for(int frameNo=0;frameNo<58;frameNo++)
{
    ostringstream outfilename;
    outfilename << InputDir<< (frameNo+1)<<".jpg";
    rawimages.Read(frameNo);
    Mat image=rawimages.ToOpencvImage();
    imwrite( outfilename.str(), image );
    outputVideo <<image;
    imshow("Image", image);
    if(waitKey(30) >= 0) break;
}

我可以看到图像显示在屏幕上,不同的jpg也保存在硬盘上。

我可以看到输出avi已创建,但其大小为零。

此代码有什么问题?

一些注意事项:

输出尺寸非常大。它可以生成那么大的电影吗?

1 个答案:

答案 0 :(得分:0)

总结注释:将第二个参数传递给VideoWriter open命令,值为-1。这应该是在Windows中打开一个编解码器选择对话框,但是从OpenCV 2.4.5开始,对话似乎被窃听 - 看起来好像,但我之后无法写入文件。

直接选择编解码器工作正常,在我看来更有意义。有关此命令和可用编解码器的更多信息,请参见here

outputVideo.open("example.avi", CV_FOURCC('M','J','P','G'), fps, size, true);