Qt-OpenCV学习笔记--保存视频--VideoWriter()

目录

一、概述

二、函数

三、测试代码

四、测试结果

五、遇到的问题

(1)初次运行代码会报错

(2)关于cv::VideoWriter::fourcc('X','2','6','4')

六、参考


一、概述

这个函数是将连续的视频帧编码并保存到磁盘。函数的用法比较简单,但有一些问题点需要注意。

二、函数

cv::VideoWriter::VideoWriter
(
	const String & 	filename,
    int 	fourcc,
    double 	fps,
    Size 	frameSize,
    bool 	isColor = true 
)		
filename视频的保存路径和文件名(包含文件后缀)
fourcc用于压缩帧的4字符编解码器代码(参数值为0,默认编码为AVI格式,不压缩,文件会很大)
fps视频帧率
frameSize视频的分辨率
isColor如果不为零,编码器将预期并编码彩色帧,否则将处理灰度帧。

在这里插入图片描述

三、测试代码

#include "widget.h"
#include "ui_widget.h"

#include <QDebug>

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>

#include <vector>

using namespace cv;
using namespace std;

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    //载入视频路径
    VideoCapture capture("c:/opencv/cup.mp4");

    //获取原视频的尺寸
    int a = capture.get(CAP_PROP_FRAME_WIDTH);
    int b = capture.get(CAP_PROP_FRAME_HEIGHT);
    Size framesize(a,b);

    //获取原视频的编码格式
    int fourcc = capture.get(CAP_PROP_FOURCC);
    qDebug()<<"编码格式:"<<fourcc;
    //获取原视频的帧率
    double fps = capture.get(CAP_PROP_FPS);
    qDebug()<<"帧率:"<<fps;
    //获取原视频的总帧数
    long int count= capture.get(CAP_PROP_FRAME_COUNT);
    qDebug()<<"总帧数:"<<count;

    //自定义编码格式
    int fourcc2 = cv::VideoWriter::fourcc('X','2','6','4');
    qDebug()<<"自定义编码格式:"<<fourcc2;

    //实例视频保存对象
    VideoWriter videoWriter("c:/opencv/cup2.mp4",fourcc,fps,framesize,true);

    //新建矩阵
    Mat frame;

    //循环
    while (1)
    {

        //读取当前帧(再次读取时,Mat自动释放,获取下一帧图像)
        capture>>frame;

        //播放完毕,跳出循环
        if(frame.empty())
        {
            qDebug()<<"播放完毕!";
            break;
        }

        //图像显示
        imshow("frame",frame);

        //保存图像
        videoWriter<<frame;

        //延时50毫秒,读取下一帧视频(延时越小,速度越快;反之,越慢)
        waitKey(25);
    }

}

Widget::~Widget()
{
    delete ui;
}

四、测试结果

五、遇到的问题

(1)初次运行代码会报错

提示缺少 openh264-1.8.0-win64.dll

下载地址:

https://github.com/cisco/openh264/releases

下载解压后,将 openh264-1.8.0-win64.dll 复制到 bin 目录即可。

(2)关于cv::VideoWriter::fourcc('X','2','6','4')

下载 openh264-1.8.0-win64.dll 后,不再其实缺少文件。

但用 cv::VideoWriter::fourcc(char c1,char c2,char c3,char c4) 设定参数,无论设定值是X264,还是MJPG,都会报错。但可以保存文件,并且文件可以正常播放。

测试代码中引用的mp4视频,拷贝于opencv的官方文档,获取其编码格式,进行编码,没有报错提示。其编码格式到底是哪一个,不得而知。

通过运行测试代码,可以看到 

X264 对应的实际值是 875967064 ,而获取的原视频的编码格式对应数值为 828601953 。

查看官方文档,也是只列举了编码参数对应的编码格式,实在太多,没有继续深究。

下面是官方文档的转载。

Video Codecs by FOURCC

Video Codecs by FOURCC 视频格式编码

六、参考

Opencv C++:使用VideoWriter 写视频

opencv中videowriter的使用

Opencv中VideoWriter详解

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值