Fork me on GitHub

Opencv视频保存方法详解

本文主要介绍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。例如:

  1. CV_FOURCC(‘P’,’I’,’M’,’1’) = MPEG-1 codec
  2. CV_FOURCC(‘M’,’J’,’P’,’G’) = motion-jpeg codec
  3. CV_FOURCC(‘M’, ‘P’, ‘4’, ‘2’) = MPEG-4.2 codec
  4. CV_FOURCC(‘D’, ‘I’, ‘V’, ‘3’) = MPEG-4.3 codec
  5. CV_FOURCC(‘D’, ‘I’, ‘V’, ‘X’) = MPEG-4 codec
  6. CV_FOURCC(‘U’, ‘2’, ‘6’, ‘3’) = H263 codec
  7. CV_FOURCC(‘I’, ‘2’, ‘6’, ‘3’) = H263I codec
  8. 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时,程序对弹出如下对话框供你选择:

video_save

本人电脑上只有选择全帧(非压缩的)才能正常打开。

帧速率不匹配

该项会导致视频时间不同。

后缀名不对

选择.avi格式没有问题,其它待定。

保存的视频乱码或打不开

这个情况一般就是编码格式不对造成的,也就是open函数中第二个参数。最好的解决方法是设为-1,然后手动选择编解码器。

参考资料

http://www.cnblogs.com/polly333/p/5165290.html

------ 本文结束感谢您的阅读 ------
坚持原创技术分享,您的支持将鼓励我继续创作!