/** It is a batch processing interface. */ #include "stdafx.h" #include <windows.h> #include <Shlwapi.h> #include <iostream> #include <string> #include <vector> #include <opencv.hpp> #pragma comment(lib,"shlwapi.lib") //注意放置的位置 using namespace std; using namespace cv; /****************************************** func:findfile decs:find all file name in a directory @param dir the aerial image set directory @param fileset image file name set in the 'dir' @return null ******************************************/ void findFile(string dir,vector<string> &fileset) { WIN32_FIND_DATAA stFD ; //存放文件信息的结构体 HANDLE h; string temp; temp=dir+"\*"; h=FindFirstFileA(temp.c_str(),&stFD); //构建文件夹句柄 while(FindNextFileA(h,&stFD)) //提取文件夹句柄相应文件夹所包括的文件 { temp=dir+"\"+stFD.cFileName; if(temp==dir+"\..") //上一级路径 { continue; } else if(PathIsDirectoryA(temp.c_str()) ) //包括子文件夹 { findFile(temp,fileset); //递归调用 } else { //cout<<stFD.cFileName<<endl; //打印文件名称 fileset.push_back(stFD.cFileName); } } return ; } /****************************************** func:make_video decs:generate video based on image set @param dir the image set path @param videoPath video path @param frameRate frame rate @param return null ******************************************/ void make_video(string dir, string videoPath,int frameRate) { vector<string> fileset; Size frameSize; VideoWriter writer; findFile(dir,fileset); vector<string>::iterator it=fileset.begin(); string filename; while(it!=fileset.end()) { cout<<"---------------------------------------------"<<endl; filename=dir+*it; cout<<filename<<endl; it++; Mat frame; frame = imread(filename); // 读入图片 if (!writer.isOpened()) { frameSize.width = frame.cols; frameSize.height = frame.rows; if (!writer.open("matching_video.avi", CV_FOURCC('D','I','V','X') , frameRate, frameSize, true)) { cout << "open writer error..." << endl; return -1; } } // 将图片数据写入 writer.write(frame); // 显示 imshow("video", frame); waitKey(frameRate); } return; } int main(void) { string dir,videoPath; int frameRate; //dir=".\shan_xi_aerial\"; //dir="E:\pic\shan_xi_aerial\"; dir="D:\我的文档\Documents\Visual Studio 2010\Projects\speed_sift\speed_sift\result\"; videoPath="matching_video.avi"; frameRate=25; make_video(dir,videoPath,frameRate); cout<<"Generate video ""<<videoPath<<"" OK!!!"<<endl; system("pause"); return 0; }