转载请注明:http://blog.youkuaiyun.com/ding977921830/article/details/50950927
- //#include "stdAfx.h"
- #include <opencv2/core/core.hpp>
- #include <opencv2\highgui\highgui.hpp>
- #include <iostream>
- #include <direct.h>//for mk_dir
- #include <io.h>//for _acess()
- using namespace cv;
- using namespace std;
- int recursive_mkdir( char *dir );//创建多级目录
- int ImageToVideo(char* outDir,char* videoName,char* inputDir,int startFrame,int endFrame, int imgW,
- int imgH,char* imgExt,double fps,int isColor,int fourcc);//图片序列转化为视频
- int main(int argc, char** argv)
- {
- char* inputDir="F:\\论文视频库\\视频帧库\\Walking\\"; //一定要加上最后的两个双斜线,输入视频帧的目录
- char* videoName="Walking.avi"; //输出的视频名字
- char* outDir="F:\\论文视频库\\视频帧库\\Walking\\"; //一定要加上最后的两个双斜线,输出的视频的目录
- int startFrame = 20; //含义:起始帧
- int endFrame = 412; //含义:起始帧,结束帧
- int imgW = 768; //含义:视频帧的宽
- int imgH = 576; //含义:视频帧的高
- char* imgExt = ".jpg"; //根据图片的性质选择.jpg,.bmp等类型,一定要注意jpg前面那个
- //点,当时我缺了这个点,浪费了我一晚上的时间才找到问题
- double fps=24; //帧率
- int isColor=1; //颜色
- int fourcc=CV_FOURCC('X','V','I','D'); //CV_FOURCC('X', 'V', 'I', 'D') 表示是XVID库进行压缩,压缩为MPEG4格式
- //int frames = 0 ; //总帧数
- IplImage *pImg=NULL;
- char cur_fn[255]; //表示某张图片的绝对路径
- char fullVideoName[255]; //输出视频的完整文件名:路径+文件名
- int frameCount = startFrame; //计算运行到第N帧
- CvVideoWriter *pWriter=NULL;
- CvSize size=cvSize(imgW,imgH);
- //判断输入文件夹是否存在
- if (_access(inputDir,0)==-1)
- {
- cout<<"the input directory does not exist!"<<endl;
- return 0;
- }
- //判断输出文件夹是否创建 若没有则创建;若为NULL则默认当前工作目录
- //char fullVideoName[255];//输出视频的完整文件名:路径+文件名
- strcpy_s(fullVideoName,"");
- if (outDir==NULL)
- {
- sprintf_s(fullVideoName,"%s",videoName);//把videoName打印成一个字符串保存在fullVideoName 中
- }
- else
- {
- if (_access(outDir,0)==-1)
- {
- recursive_mkdir(outDir);
- }
- sprintf_s(fullVideoName,"%s%s",outDir,videoName);//将字符串outDir和videoName连接起来,打印,保存在fullVideoName中
- }
- pWriter=cvCreateVideoWriter(videoName,fourcc,fps,size,isColor);//CREATE WRITER
- while(startFrame<=endFrame)
- {
- strcpy_s(cur_fn,"");
- sprintf_s(cur_fn,"%s%d%s",inputDir,startFrame,imgExt);//need to change
- pImg=cvLoadImage(cur_fn,isColor);
- if (!pImg)
- {
- std::cout<<"can't open an image file"<<std::endl;
- // return frameCount;
- }
- Mat mtx(pImg); // IplImage格式转换成Mat格式
- namedWindow("MyWindow", CV_WINDOW_AUTOSIZE);
- imshow("MyWindow", mtx);
- cout<<"运行到第 "<< frameCount<<" 帧 ";
- waitKey(10);
- // destroyWindow("MyWindow");
- cvWriteFrame(pWriter,pImg);
- cvWaitKey(1);
- std::cout<<"Write frame "<<startFrame<<std::endl;
- startFrame++;
- cvReleaseImage(&pImg);
- frameCount++;
- }
- // cvReleaseVideoWriter(&pWriter);
- rename(videoName,fullVideoName);//移动文件到指定文件夹
- // return frameCount;
- std::cout<<"total frames "<<frameCount<<" have been write to video."<<std::endl;
- system("pause");
- return 0;
- }
- //该函数借鉴了网上资料,自动创建多级目录
- int recursive_mkdir( char *dir )
- {
- //分解路径名E:\\AA\\BB\\CC\\
- //
- std::string str = dir;
- int index = 0;
- int i = 0;
- while(1)
- {
- std::string::size_type pos = str.find("\\",index);
- std::string str1;
- str1 = str.substr(0,pos);
- if( pos != -1 && i > 0 )
- {
- if (_access(str1.c_str(),0)==-1)
- {
- _mkdir(str1.c_str());
- }
- }
- if( pos==-1 )
- {
- break;
- }
- i ++;
- index = pos+1;
- }
- return 0;
- }
参考文献:
http://blog.youkuaiyun.com/sway_2012/article/details/7786465