opencv:批量读取一个文件夹下的图片,并转换成视频

转载请注明:http://blog.csdn.net/ding977921830/article/details/50950927


[cpp]  view plain  copy
 print ?
  1. //#include "stdAfx.h"  
  2. #include <opencv2/core/core.hpp>  
  3. #include <opencv2\highgui\highgui.hpp>  
  4. #include <iostream>  
  5. #include <direct.h>//for mk_dir  
  6. #include <io.h>//for _acess()  
  7. using namespace cv;  
  8. using namespace std;  
  9.   
  10.     int recursive_mkdir( char *dir );//创建多级目录  
  11.     int ImageToVideo(char* outDir,char* videoName,char* inputDir,int startFrame,int endFrame, int imgW,  
  12.     int imgH,char* imgExt,double fps,int isColor,int fourcc);//图片序列转化为视频  
  13.   
  14.   
  15.  int main(int argc, char** argv)  
  16.  {  
  17.       char* inputDir="F:\\论文视频库\\视频帧库\\Walking\\";        //一定要加上最后的两个双斜线,输入视频帧的目录  
  18.       char* videoName="Walking.avi";                                  //输出的视频名字  
  19.       char* outDir="F:\\论文视频库\\视频帧库\\Walking\\";              //一定要加上最后的两个双斜线,输出的视频的目录  
  20.   
  21.       int startFrame = 20;                                        //含义:起始帧  
  22.       int endFrame = 412;                                         //含义:起始帧,结束帧   
  23.       int imgW = 768;                                             //含义:视频帧的宽  
  24.       int imgH = 576;                                             //含义:视频帧的高  
  25.       char* imgExt = ".jpg";                                      //根据图片的性质选择.jpg,.bmp等类型,一定要注意jpg前面那个  
  26.                                                                   //点,当时我缺了这个点,浪费了我一晚上的时间才找到问题  
  27.       double fps=24;                                              //帧率  
  28.       int isColor=1;                                              //颜色  
  29.       int fourcc=CV_FOURCC('X','V','I','D');                      //CV_FOURCC('X', 'V', 'I', 'D') 表示是XVID库进行压缩,压缩为MPEG4格式  
  30.       //int frames = 0 ;     //总帧数  
  31.       
  32.       IplImage *pImg=NULL;  
  33.       char cur_fn[255];                                               //表示某张图片的绝对路径  
  34.       char fullVideoName[255];                    //输出视频的完整文件名:路径+文件名  
  35.       int frameCount = startFrame;                                //计算运行到第N帧  
  36.       CvVideoWriter *pWriter=NULL;  
  37.       CvSize size=cvSize(imgW,imgH);  
  38.       
  39.         //判断输入文件夹是否存在  
  40.          if (_access(inputDir,0)==-1)  
  41.          {  
  42.            cout<<"the input directory does not exist!"<<endl;  
  43.             return 0;  
  44.          }  
  45.    //判断输出文件夹是否创建 若没有则创建;若为NULL则默认当前工作目录  
  46.    //char fullVideoName[255];//输出视频的完整文件名:路径+文件名  
  47.          strcpy_s(fullVideoName,"");  
  48.    if (outDir==NULL)  
  49.    {  
  50.     sprintf_s(fullVideoName,"%s",videoName);//把videoName打印成一个字符串保存在fullVideoName 中   
  51.    }  
  52.    else  
  53.    {  
  54.         if (_access(outDir,0)==-1)  
  55.            {  
  56.                recursive_mkdir(outDir);  
  57.            }  
  58.       sprintf_s(fullVideoName,"%s%s",outDir,videoName);//将字符串outDir和videoName连接起来,打印,保存在fullVideoName中  
  59.    }  
  60.   
  61.     pWriter=cvCreateVideoWriter(videoName,fourcc,fps,size,isColor);//CREATE WRITER  
  62.           
  63.     while(startFrame<=endFrame)  
  64.     {  
  65.      strcpy_s(cur_fn,"");  
  66.      sprintf_s(cur_fn,"%s%d%s",inputDir,startFrame,imgExt);//need to change    
  67.      pImg=cvLoadImage(cur_fn,isColor);  
  68.      
  69.      if (!pImg)      
  70.      {  
  71.       std::cout<<"can't open an image file"<<std::endl;  
  72.      // return frameCount;  
  73.      }  
  74.       Mat mtx(pImg);     // IplImage格式转换成Mat格式  
  75.      namedWindow("MyWindow", CV_WINDOW_AUTOSIZE);  
  76.     imshow("MyWindow", mtx);  
  77.     cout<<"运行到第 "<< frameCount<<" 帧 ";  
  78.    
  79.     waitKey(10);  
  80.    
  81.   //  destroyWindow("MyWindow");  
  82.      cvWriteFrame(pWriter,pImg);  
  83.      cvWaitKey(1);  
  84.      std::cout<<"Write frame "<<startFrame<<std::endl;  
  85.      startFrame++;  
  86.      cvReleaseImage(&pImg);  
  87.      frameCount++;  
  88.     }  
  89.    // cvReleaseVideoWriter(&pWriter);  
  90.     rename(videoName,fullVideoName);//移动文件到指定文件夹  
  91.    // return  frameCount;  
  92.      std::cout<<"total frames "<<frameCount<<" have been write to video."<<std::endl;  
  93.   
  94.     system("pause");  
  95.   
  96.     return 0;  
  97.  }  
  98.    
  99. //该函数借鉴了网上资料,自动创建多级目录  
  100. int recursive_mkdir( char *dir )  
  101. {  
  102.  //分解路径名E:\\AA\\BB\\CC\\  
  103.  //  
  104.  std::string str = dir;  
  105.  int index = 0;  
  106.  int i = 0;  
  107.  while(1)  
  108.  {  
  109.   std::string::size_type pos = str.find("\\",index);  
  110.   std::string str1;  
  111.   str1 = str.substr(0,pos);  
  112.   if( pos != -1 && i > 0 )  
  113.   {  
  114.    if (_access(str1.c_str(),0)==-1)  
  115.    {  
  116.        _mkdir(str1.c_str());  
  117.    }  
  118.   }  
  119.   if( pos==-1 )  
  120.   {  
  121.    break;  
  122.   }  
  123.   i ++;  
  124.   index = pos+1;  
  125.  }  
  126.  return 0;  
  127. }  
  128.    

参考文献:

http://blog.csdn.net/sway_2012/article/details/7786465

转载请注明:http://blog.csdn.net/ding977921830/article/details/50950927


[cpp]  view plain  copy
 print ?
  1. //#include "stdAfx.h"  
  2. #include <opencv2/core/core.hpp>  
  3. #include <opencv2\highgui\highgui.hpp>  
  4. #include <iostream>  
  5. #include <direct.h>//for mk_dir  
  6. #include <io.h>//for _acess()  
  7. using namespace cv;  
  8. using namespace std;  
  9.   
  10.     int recursive_mkdir( char *dir );//创建多级目录  
  11.     int ImageToVideo(char* outDir,char* videoName,char* inputDir,int startFrame,int endFrame, int imgW,  
  12.     int imgH,char* imgExt,double fps,int isColor,int fourcc);//图片序列转化为视频  
  13.   
  14.   
  15.  int main(int argc, char** argv)  
  16.  {  
  17.       char* inputDir="F:\\论文视频库\\视频帧库\\Walking\\";        //一定要加上最后的两个双斜线,输入视频帧的目录  
  18.       char* videoName="Walking.avi";                                  //输出的视频名字  
  19.       char* outDir="F:\\论文视频库\\视频帧库\\Walking\\";              //一定要加上最后的两个双斜线,输出的视频的目录  
  20.   
  21.       int startFrame = 20;                                        //含义:起始帧  
  22.       int endFrame = 412;                                         //含义:起始帧,结束帧   
  23.       int imgW = 768;                                             //含义:视频帧的宽  
  24.       int imgH = 576;                                             //含义:视频帧的高  
  25.       char* imgExt = ".jpg";                                      //根据图片的性质选择.jpg,.bmp等类型,一定要注意jpg前面那个  
  26.                                                                   //点,当时我缺了这个点,浪费了我一晚上的时间才找到问题  
  27.       double fps=24;                                              //帧率  
  28.       int isColor=1;                                              //颜色  
  29.       int fourcc=CV_FOURCC('X','V','I','D');                      //CV_FOURCC('X', 'V', 'I', 'D') 表示是XVID库进行压缩,压缩为MPEG4格式  
  30.       //int frames = 0 ;     //总帧数  
  31.       
  32.       IplImage *pImg=NULL;  
  33.       char cur_fn[255];                                               //表示某张图片的绝对路径  
  34.       char fullVideoName[255];                    //输出视频的完整文件名:路径+文件名  
  35.       int frameCount = startFrame;                                //计算运行到第N帧  
  36.       CvVideoWriter *pWriter=NULL;  
  37.       CvSize size=cvSize(imgW,imgH);  
  38.       
  39.         //判断输入文件夹是否存在  
  40.          if (_access(inputDir,0)==-1)  
  41.          {  
  42.            cout<<"the input directory does not exist!"<<endl;  
  43.             return 0;  
  44.          }  
  45.    //判断输出文件夹是否创建 若没有则创建;若为NULL则默认当前工作目录  
  46.    //char fullVideoName[255];//输出视频的完整文件名:路径+文件名  
  47.          strcpy_s(fullVideoName,"");  
  48.    if (outDir==NULL)  
  49.    {  
  50.     sprintf_s(fullVideoName,"%s",videoName);//把videoName打印成一个字符串保存在fullVideoName 中   
  51.    }  
  52.    else  
  53.    {  
  54.         if (_access(outDir,0)==-1)  
  55.            {  
  56.                recursive_mkdir(outDir);  
  57.            }  
  58.       sprintf_s(fullVideoName,"%s%s",outDir,videoName);//将字符串outDir和videoName连接起来,打印,保存在fullVideoName中  
  59.    }  
  60.   
  61.     pWriter=cvCreateVideoWriter(videoName,fourcc,fps,size,isColor);//CREATE WRITER  
  62.           
  63.     while(startFrame<=endFrame)  
  64.     {  
  65.      strcpy_s(cur_fn,"");  
  66.      sprintf_s(cur_fn,"%s%d%s",inputDir,startFrame,imgExt);//need to change    
  67.      pImg=cvLoadImage(cur_fn,isColor);  
  68.      
  69.      if (!pImg)      
  70.      {  
  71.       std::cout<<"can't open an image file"<<std::endl;  
  72.      // return frameCount;  
  73.      }  
  74.       Mat mtx(pImg);     // IplImage格式转换成Mat格式  
  75.      namedWindow("MyWindow", CV_WINDOW_AUTOSIZE);  
  76.     imshow("MyWindow", mtx);  
  77.     cout<<"运行到第 "<< frameCount<<" 帧 ";  
  78.    
  79.     waitKey(10);  
  80.    
  81.   //  destroyWindow("MyWindow");  
  82.      cvWriteFrame(pWriter,pImg);  
  83.      cvWaitKey(1);  
  84.      std::cout<<"Write frame "<<startFrame<<std::endl;  
  85.      startFrame++;  
  86.      cvReleaseImage(&pImg);  
  87.      frameCount++;  
  88.     }  
  89.    // cvReleaseVideoWriter(&pWriter);  
  90.     rename(videoName,fullVideoName);//移动文件到指定文件夹  
  91.    // return  frameCount;  
  92.      std::cout<<"total frames "<<frameCount<<" have been write to video."<<std::endl;  
  93.   
  94.     system("pause");  
  95.   
  96.     return 0;  
  97.  }  
  98.    
  99. //该函数借鉴了网上资料,自动创建多级目录  
  100. int recursive_mkdir( char *dir )  
  101. {  
  102.  //分解路径名E:\\AA\\BB\\CC\\  
  103.  //  
  104.  std::string str = dir;  
  105.  int index = 0;  
  106.  int i = 0;  
  107.  while(1)  
  108.  {  
  109.   std::string::size_type pos = str.find("\\",index);  
  110.   std::string str1;  
  111.   str1 = str.substr(0,pos);  
  112.   if( pos != -1 && i > 0 )  
  113.   {  
  114.    if (_access(str1.c_str(),0)==-1)  
  115.    {  
  116.        _mkdir(str1.c_str());  
  117.    }  
  118.   }  
  119.   if( pos==-1 )  
  120.   {  
  121.    break;  
  122.   }  
  123.   i ++;  
  124.   index = pos+1;  
  125.  }  
  126.  return 0;  
  127. }  
  128.    

参考文献:

http://blog.csdn.net/sway_2012/article/details/7786465

猜你喜欢

转载自blog.csdn.net/qq_28713863/article/details/77721295