1 //采用windows控制台实现计算文件夹中对象总数以及批量读取对象 2 3 //#include <afx.h> //和windows.h是一样的作用 4 #include <opencv2/opencv.hpp> 5 #include <windows.h> 6 7 using namespace cv; 8 using namespace std; 9 10 int CBRelationship(string buffer); 11 12 int main() 13 { 14 15 int count = 1; //记录文件夹中对象数目 16 17 WIN32_FIND_DATA p; //p是一个用于保存文件信息的结构体 18 HANDLE h = FindFirstFile("C:/Users/Administrator/Desktop/区分高架定位/*.jpg",&p); 19 cout<<p.cFileName<<endl;//打印被找到的第一个*.jpg的文件名 20 while(FindNextFile(h,&p)) //p不断后移,寻找下一个、下下一个*.jpg 21 { 22 cout<<p.cFileName<<endl; 23 count++; 24 } 25 cout<<"count="<<count<<endl; 26 27 //依次自动的对每一幅图像进行相应处理 28 int i;//处理图像的序号 29 int result;//处理图像得到的结果 30 char buffer[200]; 31 char imageDirectory[] = "C:/Users/Administrator/Desktop/区分高架定位";//存放图像的目录 32 char imageFileType[] = "jpg";//图像类型 33 34 FILE *fp=fopen("C:/Users/Administrator/Desktop/区分高架定位/result.txt","w");//打开并写入文件 35 36 for ( i = 1;i <= count;i++) 37 { 38 39 sprintf(buffer,"%s/%d.%s", imageDirectory,i, imageFileType); //创建可变得图像路径buffer 40 41 result = CBRelationship( buffer);//函数处理后返回值result 42 43 fprintf(fp,"%d ",result);//将result存入到文件中 44 45 } 46 47 fclose(fp); //关闭文件 48 return 0; 49 }
2. 利用OpenCV类批量处理文件夹及文件图像并重命名
代码:
1 #include <opencv2/opencv.hpp> 2 #include <iostream> 3 #include <vector> 4 5 using namespace cv; 6 using namespace std; 7 8 int main() 9 { 10 //用于存储训练的数据 11 cv::Directory TrainDir;//用于遍历路径下文件的类 12 string path1 = "E:/train/9";//训练样本所在文件夹 9为手动修改文件夹 13 string exten1 = "*.bmp";//训练样本的后缀名 14 bool addPath1 = true;//true; //是true则函数返回文件绝对路径和文件名,是false则返回文件名 15 16 vector<string> Train_pathnames = TrainDir.GetListFiles(path1, exten1, addPath1);//存储所有待训练样本的路径+文件名 17 18 char image_name[20] = { 0 }; 19 int digit_tag = path1[path1.size() - 1] - 48; 20 21 //遍历目标文件夹,读入所有待训练样本, 22 for (int i = 0; i < Train_pathnames.size(); i++) 23 { 24 Mat Image = imread(Train_pathnames[i]); 25 sprintf_s(image_name, "E:/%d/%d-%d.bmp", digit_tag, digit_tag, i);//定义文件名 可变 26 imwrite(image_name, Image); 27 } 28 return 0; 29 }