OpenCV VideoWriter使用方法

这篇具有很好参考价值的文章主要介绍了OpenCV VideoWriter使用方法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在opencv中提供很好用的录制视频的句柄,也可称之为类videowriter。

一、VideoWriter接口介绍

1、打开视频输出
cv::VideoWriter有两个构造函数,一个是默认构造函数,仅仅创建一个未初始化的VideoWriter对象用于之后的打开操作;另一个是拥有所需要的参数,并初始化VideoWriter对象,如下:

cv::VideoWriter::VideoWriter(
    const string& filename,  // input filename
    int fourcc,  // codec, use CV_FOURCC() macro
    double fps,  // frame rate (stored in output file)
    cv::Size  frame_size,  // Size of individual images
    bool is_color = true  // if false, you can pass gray frames
);


写视频时需要设置一系列参数,包括:文件名、编解码器、帧率、宽度和高度等,还可以志峰图像是否彩色,isColor设置为false,可以传入灰度图。编解码器使用四个字符表示,可以是CV_FOURCC('M','J','P','G')、CV_FOURCC('X,'V','I','D')、CV_FOURCC('D','I','V','X')。
使用默认构造函数创建对象后,可以使用cv::VideoWriter::open()方法进行配置,参数与构造函数相同。

2、写入一帧图像
写入图像时可以使用VideoWriter::write()函数,也可以使用重载符<<。
需要注意的是待写入的图像尺寸必须是与创建视频时指定的尺寸一致。

3、关闭视频输出
release

详细方法:

class VideoWriter
{
public:
    //构造
    VideoWriter();
    /*filename:输出视频文件的文件名  
      fourcc:用于压缩帧的编解码器的4个字符代码。
      fps:帧率
      frameSize:帧宽高大小;
      isColor:非0,编码器将期望并编码彩色帧;否则,灰度帧;
    */
    VideoWriter(const String& filename, int fourcc, double fps,
                Size frameSize, bool isColor = true);
    //apiPreference参数: cv::CAP_FFMPEG or cv::CAP_GSTREAMER等
     VideoWriter(const String& filename, int apiPreference, int fourcc, double fps,
                Size frameSize, bool isColor = true);
 
    //析构
    virtual ~VideoWriter();
 
    //打开文件
    virtual bool open(const String& filename, int fourcc, double fps,
                      Size frameSize, bool isColor = true);
    bool open(const String& filename, int apiPreference, int fourcc, double fps,
                      Size frameSize, bool isColor = true);
 
    //若视频输出已经被成功初始化(打开),返回true;
    virtual bool isOpened() const;
    
    //关闭视频输出
    virtual void release();
    
    //写下一帧
    virtual void write(const Mat& image);
 
    virtual bool set(int propId, double value);
    virtual double get(int propId) const;
 
    //将4个字符连接到一个fourcc代码
    static int fourcc(char c1, char c2, char c3, char c4);
 
protected:
    Ptr<CvVideoWriter> writer;
    Ptr<IVideoWriter> iwriter;
 
    static Ptr<IVideoWriter> create(const String& filename, int fourcc, double fps,
                                    Size frameSize, bool isColor = true);
};

二、实例

1、保存avi视频文件

#include<opencv2/opencv.hpp>
#include<iostream>
using namespace cv;
using namespace std;
 
void main(){
    VideoCapture cap;
    cap.open("d:\\input.avi");
    Size sizeReturn = Size(cap.get(CV_CAP_PROP_FRAME_WIDTH),cap.get(CV_CAP_PROP_FRAME_HEIGHT));
    VideoWriter writer("d:\\output.avi",cv::VideoWriter::fourcc('M', 'J', 'P', 'G'),cap.get(CV_CAP_PROP_FPS),sizeReturn,false);
 
    if(!cap.isOpened())
        return;
 
    Mat frame;
    while(true)
    {
        cap>>frame;
        if(frame.empty())
            break;
        writer<<frame;//等同于writer.write(frame);
        imshow("video", frame);
        if(waitKey(20)>0)
            break;
    }
    cout<<"write end!";
    cap.release();
    destroyAllWindows();
}

2、多张图片合并成mp4视频

#include<opencv2/opencv.hpp>
#include<iostream>
using namespace cv;
using namespace std;
int main()
{
    //读取第一帧图像,获取长宽
    Mat src = imread("1.bmp");
    int width = src.cols;
    int height = src.rows;
    //配置视频参数
    VideoWriter writer;
    writer.open("d:\\out.mp4", VideoWriter::fourcc('m', 'p', '4', 'v'), 15, Size(width, height), 1);
    char savefile[200];
    Mat srcc;
    for (int i = 0; i < 500; i++) {
        for (int j = 1; j <= 6; j++)
        {
            sprintf(savefile, "d:\\input\\%d.bmp", j);
            srcc = imread(savefile, 1);
            if (srcc.empty())
            {
                cout << "图片读取结束" << endl;
                break;
            }

            imshow("Output Video", srcc);
            waitKey(1000 / 15);
            writer.write(srcc);
        }
    }
}

三、注意事项

1、opencv2.x版本只支持avi格式,opencv3.x支持mp4。
2、保存mp4文件时,出现VideoWriter writer.open()打开失败会返回false,同时writer.isOpened()也会返回false。
解决方法:运行环境缺少opencv_ffmpeg***_64.dll和opencv_ffmpeg***.dll底层调用库,将它们拷贝过来就行。
3、目前VideoWriter 这个类生成的视频文件不能大于2GB,而且不能添加音频。建议使用ffmpeg库或者gpac库来存储视频文件。文章来源地址https://www.toymoban.com/news/detail-463146.html

到了这里,关于OpenCV VideoWriter使用方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 使用 OpenCV 进行图像模糊度检测(拉普拉斯方差方法)

    使用 OpenCV 进行图像模糊度检测(拉普拉斯方差方法)

    工作中遇到,简单整理 人脸识别中,对于模糊程度较高的图像数据,识别率低,错误率高。 虽然使用 AdaFace 模型,对 低质量人脸 表现尤为突出。 但是还是需要对 模糊程度高的图像进行丢弃处理 当前通过 阈值分类 ,符合要求的进行特性提取 实际应用中,可以维护一个 质

    2024年02月15日
    浏览(46)
  • Python使用Opencv图像处理方法完成手势识别(一)

    Python使用Opencv图像处理方法完成手势识别(一)

    由于是使用Opencv完成手势识别,所以首先利用颜色特征是对手的颜色进行提取,获得HSV的最小值与最大值。 HSV颜色空间阈值主要是靠 Trackbar 调节阈值和 cv2.inRange 来生成掩膜来提取。 这是我写的HSV阈值获取的代码: 使用方法: 运行代码之后,从第一个依次调节滑块,使画面中

    2024年02月05日
    浏览(44)
  • 使用Matlab、Opencv、Ros三种方法完成相机标定

    使用Matlab、Opencv、Ros三种方法完成相机标定

    1、相机标定的意义         在机器视觉领域,相机的标定是一个关键的环节,它决定了机器视觉系统能否有效的定位,能否有效的计算目标物。相机标定意义在于将现实世界中的三维物体与相机图像对应的二维物体映射起来,实际上就是透视投影。 2、相机标定原理   

    2024年04月13日
    浏览(15)
  • cv::solvePnP使用方法及注意点详解(OpenCV/C++)

    1、参数说明: objectPoints :一个 vectorcv::Point3f,包含了在世界坐标系中的三维点的坐标,至少需要4个点。 imagePoints :一个 vectorcv::Point2f,包含了对应的图像上的二维点的坐标,与 objectPoints 中的点一一对应。 cameraMatrix :相机的内参数矩阵,类型为 cv::Mat,一般为 3x3 的浮点数

    2024年02月05日
    浏览(11)
  • Python OpenCV 图像缩放:使用 cv2.resize() 方法

    图像缩放是计算机视觉和图像处理中常用的操作之一。OpenCV 是一个强大的计算机视觉库,提供了许多图像处理功能。在 Python 中使用 OpenCV 进行图像缩放非常简单,可以使用 cv2.resize() 方法来实现。 cv2.resize() 方法可以根据指定的尺寸调整图像的大小。它可以缩小图像,也可以

    2024年02月02日
    浏览(45)
  • 史上最全OpenCV常用方法及使用说明汇总,建议收藏!

    史上最全OpenCV常用方法及使用说明汇总,建议收藏!

    前言 : Hello大家好,我是小哥谈。 计算机视觉的基础首先是处理图像、视频这些非结构化的数据,而图像处理库比较常用和强大的有PIL、OpenCV模块,本节课主要讲述 OpenCV常用的方法及使用说明。  🌈      目录 🚀一、基本操作  🚀二、绘图 🚀三、阈值处理 🚀四、几何

    2024年02月11日
    浏览(8)
  • OpenCV VideoCapture使用方法(视频文件、摄像头、网络视频文件)

    cv::VideoCapture既支持视频文件的读取,也支持从摄像机中视频的读取。cv::VideoCapture对象的创建方式有以下三种: 方式一:     cv::VideoCapture capture(     const string filename, // 输入视频文件路径名     ); 方式二:     cv::VideoCapture capture(     int device // 输入摄像机视频捕捉设备

    2024年02月06日
    浏览(15)
  • Qt-OpenCV学习笔记--保存视频--VideoWriter()

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

    目录 一、概述 二、函数 三、测试代码 四、测试结果 五、遇到的问题 (1)初次运行代码会报错 (2)关于cv::VideoWriter::fourcc(\\\'X\\\',\\\'2\\\',\\\'6\\\',\\\'4\\\') 六、参考 这个函数是将连续的视频帧编码并保存到磁盘。函数的用法比较简单,但有一些问题点需要注意。 filename 视频的保存路径和文件

    2024年02月13日
    浏览(9)
  • OpenCV(图像处理)-基于python-滤波器(低通、高通滤波器的使用方法)

    OpenCV(图像处理)-基于python-滤波器(低通、高通滤波器的使用方法)

    低通滤波 :低通滤波可以去除图像的噪音或平滑图像。 高通滤波 :可以帮助查找图像的边缘。 噪音 :即对一幅图像的产生负面效果,过暗或过亮的部分,一幅图像中,低于或高于某个像素点的值,都可以认为是噪音。 卷积核 :即用来滤波的矩阵,卷积核一般为奇数,如

    2024年02月09日
    浏览(15)
  • OpenCV(图像处理)-基于Oython-滤波器(低通、高通滤波器的使用方法)

    OpenCV(图像处理)-基于Oython-滤波器(低通、高通滤波器的使用方法)

    低通滤波 :低通滤波可以去除图像的噪音或平滑图像。 高通滤波 :可以帮助查找图像的边缘。 噪音 :即对一幅图像的产生负面效果,过暗或过亮的部分,一幅图像中,低于或高于某个像素点的值,都可以认为是噪音。 卷积核 :即用来滤波的矩阵,卷积核一般为奇数,如

    2024年02月09日
    浏览(13)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包