• 解决"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

  • 相关阅读:
    缺失的第一个正数
    tuple用法
    整数转罗马数字
    三种时间格式的转换
    不同包的调用
    正则表达式
    lgb模板
    线性回归
    时间序列的特征
    3D聚类
  • 原文地址:https://www.cnblogs.com/wqvbjhc/p/2465147.html
Copyright © 2020-2023  润新知