温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

C++ 中如何使用VideoWriter写入视频

发布时间:2021-07-30 16:46:09 来源:亿速云 阅读:473 作者:Leah 栏目:大数据

C++ 中如何使用VideoWriter写入视频,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

VideoWriter

类的创建

VideoWriter的对象的创建有两种方式:

第一种是使用构造函数的形式:

cv::VideoWriter out(  

    const string& filename, // 输入文件名  

    int fourcc, // 编码形式,使用 CV_FOURCC()宏  

    double fps, // 输出视频帧率  

    cv::Size frame_size, // 单帧图片的大小  

    bool is_color = true // 如果是false,可传入灰度图像   

);  

第二种使用open()的方式:

cv::VideoWriter out;  

out.open(  

    "my_video.mpg", //输出文件名  

    CV_FOURCC('D','I','V','X'), // MPEG-4 编码  

    30.0, // 帧率 (FPS)  

    cv::Size( 640, 480 ), // 单帧图片分辨率为 640x480  

    true // 只输入彩色图  

); 

CV_FOURCC可以获取的编码格式

CV_FOURCC('P', 'I', 'M', '1') = MPEG-1 code

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
MPEG-1是为CD光盘介质定制的视频和音频压缩格式;
Motion JPEG是一种视频压缩格式,其中每一帧图像都分别使用JPEG编码;
MPEG-4利用很窄的带宽,通过帧重建技术,压缩和传输数据,以求以最少的数据获得最佳的图像质量;


视频写入

VideoWriter对象写入图像

cv::VideoWriter::write(  

    const Mat& image // 写入图像作为下一帧  

);  

 

我们还有另一种方式,即“<<”操作

my_video_writer << my_frame; 

前面我们在VideoCapture中的Read读视频的操作也可以用”>>“操作

my_video_writer >> my_frame;


下面我们用到的素材,视频素材还是我们上次已经开始用的《倾倒世界》,图像素材用我们以前经常用的

C++ 中如何使用VideoWriter写入视频

目标

我们是把上面这个图像写入到我们播放的视频里,比如在播放视频的第15帧,第30帧,第50帧,第65帧,都写入我们这个图像,然后播放出来看看。

视频效果

实现思路

  1. 加载我们的图片为Mat图像。

  2. 通过VideoCapture加载视频获取到视频的FPS及宽和高

  3. 把我们的图像缩放至上一步获取到的宽和高大小

  4. 创建VideoWriter对象

  5. 播放VideoCapture加载的视频,获取到的每一帧都写入到VideoWriter的对象里,当判断到第15帧,第30帧,第50帧,第65帧时写入我们的Mat加载的图片;

  6. 释放资源。

代码编写

新建一个项目opencv-1003,配置属性(VS2017配置OpenCV通用属性),然后在源文件写入#include和main方法

C++ 中如何使用VideoWriter写入视频


1.加载我们的图片为Mat图像

C++ 中如何使用VideoWriter写入视频


2.通过VideoCapture加载视频获取到视频的FPS及宽和高,并计算出两帧相隔的时间

C++ 中如何使用VideoWriter写入视频


3.把我们的图像缩放至上一步获取到的宽和高大小

C++ 中如何使用VideoWriter写入视频


4.创建VideoWriter对象

C++ 中如何使用VideoWriter写入视频

上面我们创建的时候直接定义为E盘Family文件夹下的test.avi文件,视频的格式为MJPG


5.播放VideoCapture加载的视频,获取到的每一帧都写入到VideoWriter的对象里,当判断到第15帧,第30帧,第50帧,第65帧时写入我们的Mat加载的图片;

C++ 中如何使用VideoWriter写入视频

C++ 中如何使用VideoWriter写入视频

C++ 中如何使用VideoWriter写入视频


6.释放资源

C++ 中如何使用VideoWriter写入视频

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注亿速云行业资讯频道,感谢您对亿速云的支持。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI