(一)支持win32控制台程序
void processCharSize(string path) { //string path = "H:\\back\\data"; vector<string> files; //文件句柄 long hFile = 0; //文件信息 struct _finddata_t fileinfo; string p; if((hFile = _findfirst(p.assign(path).append("\\*").c_str(),&fileinfo)) != -1) { do { //如果是目录,迭代之 //如果不是,加入列表 if((fileinfo.attrib & _A_SUBDIR)) { if(strcmp(fileinfo.name,".") != 0 && strcmp(fileinfo.name,"..") != 0) processCharSize( p.assign(path).append("\\").append(fileinfo.name)/*, files*/ ); } else { //files.push_back(p.assign(path).append("\\").append(fileinfo.name) ); string newFileName = p.assign(path).append("\\").append(fileinfo.name); Mat oldImg = imread(newFileName,0); // 0 代表读取的是灰度图像 threshold(oldImg,oldImg,THRESH_OTSU | THRESH_BINARY,1) Mat newImg ; //copyMakeBorder(oldImg,newImg,2,2,2,2,BORDER_CONSTANT,Scalar(0)); //resize(newImg,newImg,Size(20,20)); // 图像边缘填充后,再resize到指定大小 copyMakeBorder(oldImg,newImg,1,3,1,3,BORDER_CONSTANT,Scalar(0)); resize(newImg,newImg,Size(20,20)); //resize(oldImg,newImg,Size(20,20)); // 直接将图像resize到指定大小 imwrite(newFileName,newImg); } }while(_findnext(hFile, &fileinfo) == 0); _findclose(hFile); } }
(二)MFC应用程序支持,Win32控制台程序不支持
void GenFileNameList( CString folder, vector<CString> &list ) { folder.TrimRight('\\'); folder += '\\'; CString filename; CFileFind finder; BOOL bWork = finder.FindFile(folder+"*.*"); vector<CString> namelist; while(bWork) { bWork = finder.FindNextFile(); if(finder.IsDirectory()==FALSE && !finder.IsDots()) { filename =finder.GetFileName(); /*clazzInfo clazz; clazz.id = subDir; clazz.path = filename;*/ list.push_back(filename); } //bWork = finder.FindNextFile(); // bWork is zero if the file found is the last one //if (/*finder.IsDirectory() &&*/ !finder.IsDots()) //{ // //open subdir // CString subDir = finder.GetFileName(); // CFileFind subFinder; // BOOL subBWork = subFinder.FindFile(folder+subDir+"\\"+"*.*"); // while (subBWork) // { // subBWork = subFinder.FindNextFile(); // if(subFinder.IsDirectory()==FALSE && !subFinder.IsDots()) // { // filename =subFinder.GetFileName(); // /*clazzInfo clazz; // clazz.id = subDir; // clazz.path = filename;*/ // list.push_back(filename); // } // } // subFinder.Close(); //} } finder.Close(); }
非注释部分支持单层文件夹下的文件遍历,注释掉的部分支持文件夹嵌套。