解决"cvCreateVideoWriter保存视频帧压缩格式只能用1"的问题

cvCreateVideoWriter函数的说明

创建视频文件写入器
typedef struct CvVideoWriter CvVideoWriter;
CvVideoWriter* cvCreateVideoWriter ( 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,则运行时会弹出一个编码器选择框.

fps
被创建视频流的帧率。
frame_size
视频流的大小。
is_color
如果非零,编码器将希望得到彩色帧并进行编码;否则,是灰度帧(只有在Windows下支持这个标志)。
函数cvCreateVideoWriter 创建视频写入器结构。

 

遇到的问题

第二个参数除了选择-1(基于Windows平台)让其弹出一个窗口选择压缩帧格式或 先获取视频编码属性,然后设置写入器编码属性,就能创建成功了

outCompressCodec = (int)cvGetCaptureProperty(pCapture, CV_CAP_PROP_FOURCC);
pVideo = cvCreateVideoWriter("c://out.avi", outCompressCodec, m_framerate, cvGetSize(frame), 1);

选择其他参数 都会出错 , 在网上找了发现有不少人遇到类似的情况,但解决办法却没有.

解决方法

后来偶然在网上看到一篇介绍使用opencv保存mp4格式的文章,里面说到要安装ffdshow软件才能保存mp4格式的文件.我安装完好测试确实如此.接着发现 cvCreateVideoWriter 函数第二个参数正常了,可以使用函数说明中的任何参数.万事大吉.

附:ffdshow下载地址

 

补充:cvWriteFrame不支持ROI

原文地址:https://www.cnblogs.com/wqvbjhc/p/2465147.html