本文主要介绍Opencv视频保存的详细方法。
视频保存流程与示例
视频保存三步走:
一开始(循环外)
VideoWriter outputVideo;
outputVideo.open("E:\\modeling\\视频\\compare3.avi", -1, 30, cvSize(cur.rows, cur.cols * 2 + 10),true);
接着(循环中)
outputVideo << canvas; //保存每帧图片到视频
最后释放(循环外)
outputVideo.release(); //可以不要
视频保存详解
第一步中:
先定义VideoWriter对象,并指定输出文件。其中,open函数的定义为:
open ( const char* filename, int fourcc, double fps, CvSize frame_size, int is_color=1 );
第一个参数filename为输出视频文件名。输出目录要存在,输出文件不存在时会自动创建。目录中注意使用转义字符
。
第二个参数fourcc为编码格式。四个字符来表示压缩帧的codec。例如:
- CV_FOURCC(‘P’,’I’,’M’,’1’) = MPEG-1 codec
- CV_FOURCC(‘M’,’J’,’P’,’G’) = motion-jpeg codec
- CV_FOURCC(‘M’, ‘P’, ‘4’, ‘2’) = MPEG-4.2 codec
- CV_FOURCC(‘D’, ‘I’, ‘V’, ‘3’) = MPEG-4.3 codec
- CV_FOURCC(‘D’, ‘I’, ‘V’, ‘X’) = MPEG-4 codec
- CV_FOURCC(‘U’, ‘2’, ‘6’, ‘3’) = H263 codec
- CV_FOURCC(‘I’, ‘2’, ‘6’, ‘3’) = H263I codec
- CV_FOURCC(‘F’, ‘L’, ‘V’, ‘1’) = FLV1 codec
若编码器代号为 -1,则运行时会弹出一个编码器选择框。
详细的视频编解码格式可参考:Video Codecs by FOURCC
第三个参数fps 被创建视频流的帧率。
第四个参数frame_size 视频流的大小。
第五个参数is_color 如果非零(true),编码器将希望得到彩色帧并进行编码;否则,是灰度帧(只有在Windows下支持这个标志)。
出错详解
输出路径不对肯定就没有视频了。此外,容易出现的问题有保存的视频大小为0,保存的视频乱码或打不开。
保存的视频大小为0
可能的原因有:
编码格式不对
在open函数中第二个参数是编码格式,一定按照提供的编码格式进行填写,在应用中最好的解决方法是为-1。当为-1时,程序对弹出如下对话框供你选择:
本人电脑上只有选择全帧(非压缩的)
才能正常打开。
帧速率不匹配
该项会导致视频时间不同。
后缀名不对
选择.avi
格式没有问题,其它待定。
保存的视频乱码或打不开
这个情况一般就是编码格式不对造成的,也就是open函数中第二个参数。最好的解决方法是设为-1,然后手动选择编解码器。