前面我说明了一下Opencv的视频转图片的方式和代码,这次要说明的是Opencv如何将图片转化为视频:
本文完整代码下载
这里主要用到的是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 :视频的大小
C++: VideoWriter& VideoWriter::operator<<(const Mat& image) C++: void VideoWriter::write(const Mat& image)
///< 视频的部分参数
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);
}原文地址:http://blog.csdn.net/daunxx/article/details/40449559