我正在尝试使用一组大型原始图像创建一些视频。
代码如下:
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已创建,但其大小为零。
此代码有什么问题?
一些注意事项:
输出尺寸非常大。它可以生成那么大的电影吗?
答案 0 :(得分:0)
总结注释:将第二个参数传递给VideoWriter open命令,值为-1。这应该是在Windows中打开一个编解码器选择对话框,但是从OpenCV 2.4.5开始,对话似乎被窃听 - 看起来好像,但我之后无法写入文件。
直接选择编解码器工作正常,在我看来更有意义。有关此命令和可用编解码器的更多信息,请参见here。
outputVideo.open("example.avi", CV_FOURCC('M','J','P','G'), fps, size, true);