视频的保存

OpenCV提供了VideoWrite()类用于实现多张图像保存成视频文件

保存视频文件VideoWrite()类构造函数

VideoWriter::VideoWriter(); //默认构造函数
VideoWriter::VideoWriter(const String & filename,
                         int fourcc,
                         double fps,
                         bool isColor = ture
                         )
  • filename:保存视频的地址和文件名,包含视频格式
  • fourcc:压缩帧的4字符编解码器代码
  • fps:保存视频的帧率,即视频中每秒图像的张数
  • frameSize:视频帧的尺寸
  • isColor:保存视频是否为彩色视频

默认构造函数用来创建一个视频流,后续通过open()函数设置保存文件名称、编解码器、帧数等一系列参数

第二种构造方式输入第一个参数为保存视频文件名称,第二个参数是编解码器的代码,如果赋值 ”-1“ 则自动搜索合适的编解码器

第三个参数为保存视频的帧率,第四个参数是设置保存的视频文件尺寸,注意设置时要与图像的尺寸相同

最后一个参数是设置的视频是否是彩色的

该函数可以通过isOpened()函数判断是否创建成功,可以通过grt()查看视频流的各种属性

保存视频时,只需将生成视频的图像通过 "<<" 一帧一帧赋值给视频流,最后使用release()关闭视频流

示例:

#include <iostream>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;
int main()
{
    Mat img;
    VideoCapture video(0); //使用摄像头
    //读取视频
    //VideoCapture video;
    //video.open("1.mp4");
    if (!video.isOpened()) //判断是否调用成功
    {
        cout << "打开摄像头失败" << endl;
        return -1;
    }
    video >> img; //获取图像
    //检测是否成功获取图像
    if (img.empty()) //判断读取图像是否成功
    {
        cout << "没有获取到图像" <<endl;
        return -1;
    }
    bool isColor = (img.type() == CV_8UC3); //判断(相机)视频类型是否为彩色
​
    VideoWriter writer;
    int codec = VideoWriter::fourcc('M','J','P','G'); //选择编码格式double fps = 10.0; //设置视频帧率
    string filename = "E:\\CLion\\opencv_xin\\live.avi"; //保存的视频文件名称
    writer.open(filename,codec,fps,img.size(),isColor); //创建保存视频的视频流if (!writer.isOpened()) //判断视频流是否创建成功
    {
        cout << "打开视频失败" << endl;
        return -1;
    }
​
    while (1)
    {
        //检测是否执行完毕
        waitKey(50);
        if (!video.read(img)) //判断能否继续从摄像头或者视频文件中读出一帧图像
        {
            cout << "摄像头断开或者视频读取完成" << endl;
            return -1;
        }
        writer.write(img); //将图像写入视频流
        imshow("Live",img); //显示图像
        char c = waitKey(50);
        if (c == 27) //按”Esc“键退出视频保存
        {
            break;
        }
    }
    return 0;
}

results matching ""

    No results matching ""