首页 > 代码库 > Duanxx的OpenCV学习:图片转化为视频

Duanxx的OpenCV学习:图片转化为视频

前面我说明了一下Opencv的视频转图片的方式和代码,这次要说明的是Opencv如何将图片转化为视频:


本文完整代码下载

1 VideoWriter说明

这里主要用到的是Opencv里的一个类:VideoWriter

其API参考链接:API链接。

函数原型:

VideoWriter::VideoWriter(const string& filename, int fourcc, double fps, Size frameSize, bool isColor=true)

参数说明:

filename : 是输出的视频文件的名字,比如:“out.avi”

fourcc : 是编码的方式,它是用四个字符定义的编码方式,编码方式参考链接: 编码方式参考

这里需要说明的是,这个值使用CV_FOURCC定义的,比如:CV_FOURCC(‘P‘,‘I‘,‘M‘,‘1‘)指的是 MPEG-1编码 

fps : 视频的帧率

framSize :视频的大小

2 图片写入视频的方式

图片写入视频主要是两种方式:
1:调用write函数
2:流操作符 <<

C++: VideoWriter& VideoWriter::operator<<(const Mat& image)
C++: void VideoWriter::write(const Mat& image)


3 主要代码示例

///< 视频的部分参数
	int width = 0, height = 0, fps = 0, fourcc = 0;	

	Mat frame;///<图像帧

	int frameCounter = 0; ///<图像帧的计数器
	namedWindow(windows_name_original);

	///<读取第一张图片,得到图像的宽高,并设置fps和编码方式
	string frameName = nameGenerate(frameCounter);
	frame = imread(frameName);
	width = frame.cols;///<获得图像的宽和高
	height = frame.rows;
	fps = 15;///<fps为15
	fourcc = CV_FOURCC('X','V','I','D');///<设置图像的编码方式
	cout<<width<<endl<<height<<endl;

	///<定义一个视频写入器,编码方式avi
	VideoWriter video;
	video.open("out.avi",fourcc,fps,cvSize(width,height));

	if (!video.isOpened())
	{
		cout<<"video is not open "<<endl;
		return 0;
	}

	///<读取图片并写入到视频文件中
	for(;frameCounter<=405;frameCounter++)
	{
		string frameName = nameGenerate(frameCounter);///<根据视频帧的计数器
							      ///<生成图像的文件名
		frame = imread(frameName);///<读取图像
		if (frame.empty())
		{
			cout<<endl<<"image Empty"<<endl;
			return 0;
		}

		video<<frame;///<图像写入到视频帧中

		cout<<frameName<<endl;
		imshow(windows_name_original,frame);
		waitKey(50);
	}

Duanxx的OpenCV学习:图片转化为视频