前面我说明了一下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