专栏首页微卡智享C++ OpenCV使用VideoWriter写入视频

C++ OpenCV使用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;


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

目标

我们是把上面这个图像写入到我们播放的视频里,比如在播放视频的第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方法


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


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


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


4.创建VideoWriter对象

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


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


6.释放资源


接下来我们运行起来就是上面视频的效果了。

-END-

本文分享自微信公众号 - 微卡智享(VaccaeShare),作者:Vaccae

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-06-11

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • C++ OpenCV视频操作之背景消除建模(BSM)-1

    前面我有几章是专门设置怎么读取视频操作的文章《C++ OpenCV播放视频及调用摄像头显示》,最近学完了一些形态学的基础操作及特征提取后,我们开始重新学习视频一...

    Vaccae
  • C++ OpenCV实现视频播放位置跳转

    前面我们学习了OpenCV通过VideoCapture类进行视频播放,并且加入了随机的播放时间一些小的知识。今天我们在视频播放的基础上实现播放位置的跳转。我们这...

    Vaccae
  • C++ OpenCV形态学操作--开闭操作,形态学梯度,顶帽,黑帽

    前面我们刚刚做过形态学的腐蚀与膨胀,这两个是OpenCV形态学里的最基本操作,我们学的开操作和闭操作也是在这两个基础上进行的处理

    Vaccae
  • 为什么游戏公司,要不断升级游戏?

    其实玩过游戏的都知道,今晚还玩的游戏的明天就提示升级,不升级不让玩,和普通的电脑软件不一样,可以选择不升级的还能继续使用,为啥游戏公司这么霸道,为啥升级这么频繁...

    程序员互动联盟
  • 衡量流媒体视频质量的行业标准

    本帖来自Discovery Track East 2019,主题为:“好”是什么样子的:朝着衡量流媒体视频质量的行业标准迈进(What does ‘good’ ...

    用户1324186
  • 梦幻!2018年马来西亚深度学习会议,贾老板Justin Timberlake《Filthy》发布AI机器人!

    相隔五年,贾老板Justin Timberlake终于带着全新专辑《Man of the Woods》宣告正式回归,继日前释出前导预告后,紧接着推出新单曲《Fi...

    WZEARW
  • (二十四) 初遇python OOP面向对象编程-类和实例对象

    各位读者大大们大家好,今天学习python的面向对象编程-类和实例对象,并记录学习过程欢迎大家一起交流分享。

    亚乐记
  • 【NLP实战】快速掌握常用的向量空间模型

    当我们想要切入某个领域时,显然这个领域已经有大量前人的工作,包括大家常用的模型、数据集、评价指标等等,初出茅庐的你却不知道这些大家习以为常的背景知识,那么如何才...

    yuquanle
  • 10 分钟实现 Java 发送邮件功能

    Spring Boot集成邮件服务竟如此简单,快速掌握邮件业务类的核心逻辑和企业邮件的日常服务。

    逆锋起笔
  • 如何找回bilibili(b站)收藏夹里失效的视频?

    失效的视频变成了无封面,不可点击,也不知道什么时候没的,想要找回来怎么办呢?下面分享几个方法。

    苏生不惑

扫码关注云+社区

领取腾讯云代金券