本文详细介绍视频的创建与写入;视频的写入主要用到VideoWriter类中放入 writer函数。
writer(const char* filename, int fourcc, double fps, CvSize frame_size, int is_color=1)
-
filename:读取视频文件路径
-
fourcc:为四个字符用来表示压缩帧的codec 例如:
CV_FOURCC('P','I','M','1') = MPEG-1 codec
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
若编码器代号为 -1,则运行时会弹出一个编码器选择框.
-
fps:写入视频帧率,即为每秒钟播放帧数
-
frame_size:视频的高和宽的大小
-
is_color:如果非零,编 码器将希望得到彩色帧并进行编码;否则,是灰度帧(只有在Windows下支持这个标志)。
实现代码
#include<opencv2/opencv.hpp>
#include<iostream>
using namespace cv;
using namespace std;
void main()
{
//视频打开类函数
VideoCapture cap;
//视频的打开
cap.open("cat.mp4");
//获取读取视频的高和宽
Size size0 = Size(cap.get(CV_CAP_PROP_FRAME_WIDTH), cap.get(CV_CAP_PROP_FRAME_HEIGHT));
//创建要写入的视频文件
VideoWriter writer("out.avi", -1, cap.get(CV_CAP_PROP_FPS), size0, false);
if (!cap.isOpened())
return;
Mat frame;
while (1)
{
cap >> frame;
if (frame.empty())
break;
//往创建的视频文件中写入视频
writer << frame;//等同于writer.write(frame);
imshow("video", frame);
if (waitKey(10) > 0)
break;
cap.release();
destroyAllWindows();
}
}
到此视频的写入介绍完毕,欢迎留言指正,如有对图像处理、计算机视觉感兴趣的小伙伴关注公众号,一起学习进步。
可以微信搜索“图像处理CV讲武堂”关注,也可如下二维扫码关注。