#include "stdafx.h" //头文件预编译;
#include
#include //标准的输入输出流头文件;
#include
#include // 目录遍历 for mk_dir;
#include // 主要定义一些和缓冲区相关的读写函数 for _acess();
#include // strcpy函数需要;
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;
}// 实现文件夹创建的功能;
int ImageToVideo(char* outDir,char* videoName,char* inputDir,int startFrame,int endFrame,
int imgW,int imgH,char* imgExt,double fps,int isColor,int fourcc=CV_FOURCC('D','I','V','X'))
{
if(_access(inputDir,0)==-1) //(文件路径,访问权限设定); 0,只检查文件是否存在; //判断输入文件夹是否存在;
// 如果文件具有指定的访问权限,则函数返回0;如果文件不存在或者不能访问指定的权限,则返回-1;
{
std::cout<<"the input directory does not exist!"<<std::endl;
return 0;
}
char fullVideoName[255]; //输出视频的完整文件名:路径+文件名;
strcpy(fullVideoName,"E:\\NewFile\\out"); //char *strcpy(char* dest, const char *src);
//把从src地址开始且含有NULL结束符的字符串复制到以dest开始的地址空间;
if (outDir==NULL)
{
sprintf(fullVideoName,"%s",videoName); // 把格式化的数据写入某个字符串中; sprintf(buffer,"%d plus %d is %d",a,b,a+b);
}
else
{
if (_access(outDir,0)==-1)
{
recursive_mkdir(outDir);
}
sprintf(fullVideoName,"%s%s",outDir,videoName);
}
int frameCount=0;
CvVideoWriter *pWriter=NULL;
CvSize size=cvSize(imgW,imgH); // 矩阵框的大小;
pWriter=cvCreateVideoWriter(videoName,fourcc,fps,size,isColor); // 创建视频写入器;
IplImage *pImg=NULL;
char cur_fn[255]; //表示某张图片的路径;
while (startFrame<=endFrame)
{
strcpy(cur_fn,"");
sprintf(cur_fn,"%s%d%s",inputDir,startFrame,imgExt);
pImg=cvLoadImage(cur_fn,1); // IplImage* cvLoadImage( const char* filename, int flags=CV_LOAD_IMAGE_COLOR );
//std::cout<<"cur_fn="<<cur_fn<<std::endl;
if (!pImg)
{
std::cout<<"can not open an image file"<<std::endl;
return frameCount;
}
cvWriteFrame(pWriter,pImg); // 写入一帧到一个视频文件中;
cvWaitKey(1); // 不断刷新图像,频率时间为1;
std::cout<<"write frame"<<startFrame<<std::endl;
startFrame++;
cvReleaseImage(&pImg);
frameCount++;
}
cvReleaseVideoWriter(&pWriter);
rename(videoName,fullVideoName); //移动文件到指定文件夹; int rename(char *oldname, char *newname);
return frameCount;
}
int _tmain(int argc, _TCHAR* argv[])
{
char* inputDir="F:\727\bmp\";
char* videoName="out";
char* outDir="E:\NewFile";
int frames=ImageToVideo(outDir,videoName,inputDir,1,30,908,454,".BMP",10,1,CV_FOURCC('D','I','V','X'));
std::cout<<"total frames"<<frames<<"have been write to video."<<std::endl;
std::cout<<"video:"<<videoName<<"have been write to "<<outDir<<std::endl;
int p;
std::cin>>p;
return 0;
}
这段程序能成功运行,运行后的结果在下图。 但是,我想要得到的视频的输出文件没有。。。求大神解决