您好,登录后才能下订单哦!
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('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帧,都写入我们这个图像,然后播放出来看看。
视频效果
实现思路
加载我们的图片为Mat图像。
通过VideoCapture加载视频获取到视频的FPS及宽和高
把我们的图像缩放至上一步获取到的宽和高大小
创建VideoWriter对象
播放VideoCapture加载的视频,获取到的每一帧都写入到VideoWriter的对象里,当判断到第15帧,第30帧,第50帧,第65帧时写入我们的Mat加载的图片;
释放资源。
代码编写
新建一个项目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.释放资源
看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注亿速云行业资讯频道,感谢您对亿速云的支持。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。