OpenCV学习笔记:序列图片生成视频流方法
2014-06-22 20:52
1406 查看
方法一:代码一在opencv2.4.3,VS2010上测试正常
目前,OpenCV只支持avi的格式,而且生成的视频文件不能大于2GB,而且不能添加音频。将图片序列合成视频流,主要用到VideoWriter类,这个类是highgui中很重要的一个工具类,通过它我们可以很方便的将图片序列保存成视频文件。
类内成员函数有构造函数,open,isOpened,write等
int main() { //图像序列提取路径 char filename[100]; Mat source_img; //已处理帧序列计数 int frame_cnt = 1; //初始化视频编写器,参数根据实际视频文件修改 VideoWriter writer("E:\\dest\\mark.avi",CV_FOURCC('X','V','I','D'), 25.0, Size(512,512), 1 ); namedWindow("mark_win"); //NUM_FRAME为需处理的图片序列总数 while( frame_cnt != NUM_FRAME ){ sprintf( filename, "E:\\source\\img%04d.jpg", frame_cnt ); source_img = imread( filename, 1 ); if( source_img.empty() ){ cout<<"can not read filename's img"<<endl; return -1; } writer << source_img; imshow( "mark_win", source_img ); if( waitKey(1)==27 ){ break; } ++frame_cnt; } return 0; }
VideoWriter构造函数参数分别是:文件的名称,格式,帧率,分辨率大小,是否彩色。
其他支持格式有:
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
方法二:早期opencv版本
直接上代码:int main(int argc, char* argv[]) { system("dir /b img > filelist.txt"); ifstream imglist("filelist.txt"); string buf; int numline=0; while(imglist) { if(getline(imglist,buf)) { numline++; } } imglist.close(); string open_dir="img/"; IplImage *frame=cvLoadImage(open_dir.append("1.jpg").c_str()); if(!frame) return; CvVideoWriter *videoWriter=cvCreateVideoWriter("avi/peng.avi",-1,30,cvSize(frame->width,frame->height)); if(!videoWriter) return; int ret=0; ret=cvWriteFrame(videoWriter,frame); if(ret!=1) { cout<<"failed to write the first frame."<<endl; return; } cvReleaseImage(&frame); frame=NULL; for(int i=1;i<numline;i++) { open_dir="img/"; cout<<"processing...img/"<<(i+1)<<".jpg"<<endl; char filename[256]; sprintf(filename,"img/%d.jpg",(i+1)); frame=cvLoadImage(filename); if(!frame) { cout<<"can not open the image: "<<filename<<endl; return; } ret=cvWriteFrame(videoWriter,frame); if(ret!=1) { cout<<"can not write to the video."<<endl; return; } cvReleaseImage(&frame); frame=NULL; } cout<<"processing...completed"<<endl; /* cvReleaseImage(&frame);*/ cvReleaseVideoWriter(&videoWriter); return 0; }
部分内容引自http://blog.csdn.net/yang_xian521/article/details/7440190
相关文章推荐
- 基础学习笔记之opencv(6):实现将图片生成视频
- 基础学习笔记之opencv(6):实现将图片生成视频
- 基础学习笔记之opencv(6):实现将图片生成视频
- OpenCV 视频与图片序列相互转换 VideoWriter生成视频流
- OpenCV 视频与图片序列相互转换 VideoWriter生成视频流
- 【OpenCV学习笔记 013】处理视频序列
- opencv 之图片序列生成视频
- OpenCV学习笔记04--图片和视频的保存
- opencv学习笔记三 视频处理序列(1)读取视频序列
- opencv学习笔记--将多帧图片保存为视频
- 基础学习笔记之opencv(2):haartraining前将统一图片尺寸方法
- 基础学习笔记之opencv(2):haartraining前将统一图片尺寸方法
- 学习OpenCV的学习笔记系列(三)显示图片及视频
- 基础学习笔记之opencv(2):haartraining前将统一图片尺寸方法
- OpenCV学习笔记——VideoWriter生成视频流highgui
- [C#学习笔记]C#生成随机数的方法
- 1.1-学习Opencv与MFC混合编程之---利用画图函数,生成视频,并写入视频文件
- 1.1-学习Opencv与MFC混合编程之---利用画图函数,生成视频,并写入视频文件
- Java学习笔记之swing文件选取器 例子 (4种读写文件方式-和图片的读写方法)
- 基础学习笔记之opencv(3):haartraining生成.xml文件过程