划分数据集代码(按照4:1的比例)以及根据各自文件名写入txt文件
生活随笔
收集整理的這篇文章主要介紹了
划分数据集代码(按照4:1的比例)以及根据各自文件名写入txt文件
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
會將圖片分到兩個文件夾中:
#include <opencv2/opencv.hpp> #include "opencv2/features2d.hpp" #include <vector> #include <algorithm> #include <iostream> #include "windows.h" #include <stdio.h> #include <time.h> #include <math.h> #include <fstream> #include <fstream> #include <iostream> #include <filesystem> #include <vector> #include <ctime> #define WINDOW_NAME "【程序窗口】" using namespace cv;using namespace std;using std::ifstream; using std::ofstream; using std::cout; using std::endl; namespace fs = std::filesystem;int main() {cv::String path = "D:/一些文件/python code/AI/新數據集/歸一化數據集"; //待處理圖片文件夾地址cv::String dest_train = "D:/一些文件/python code/AI/新數據集/測試集"; //處理后圖片的保存地址cv::String dest_test = "D:/一些文件/python code/AI/新數據集/訓練集"; //處理后圖片的保存地址cout << "獲取地址成功" << endl;cv::String savedfilename;std::vector<cv::String> filenames;int len = path.length();cv::Mat srcImg;cv::glob(path, filenames); //opencv里面用來讀取指定路徑下文件名的一個很好用的函數 //初始化一個隨機vector,值為1的序號作為測試集,值為0的序號作為訓練集srand((unsigned)time(NULL));vector<int> Test(filenames.size(), 0);for (int i = 0; i < Test.size() * 0.2; i++){int num = rand() % filenames.size();//如果已經存在了,重新初始化一個numwhile (Test[num] == 1){num = rand() % Test.size();}//如果不存在的話Test[num] = 1;}//根據vector的值劃分數據集for (int i = 0; i < filenames.size(); i++) {srcImg = cv::imread(filenames[i], 0);//*************************對圖片的處理部分***************************/if (Test[i] == 0){savedfilename = dest_train + filenames[i].substr(len);}else{savedfilename = dest_test + filenames[i].substr(len);}std::cout << savedfilename << std::endl;cv::imwrite(savedfilename, srcImg);cout << "第" << i << "張完成" << endl;}waitKey(0);return 0; }然后生成兩個txt文件,分別寫入圖片名字。
#include <fstream>//ifstream讀文件,ofstream寫文件,fstream讀寫文件#include <string>//文本對象,儲存讀取的內容 #include <iostream>//屏幕輸出cout #include <cstdlib>//調用system("pause"); #include <windows.h>//用于函數SetConsoleOutputCP(65001);更改cmd編碼為utf8 using namespace std;int main() {SetConsoleOutputCP(65001);ifstream in("D:/一些文件/python code/AI/新數據集/name.txt");ofstream out_test; //("D:/一些文件/python code/AI/新數據集/test.txt");ofstream out_train; //("D:/一些文件/python code/AI/新數據集/train.txt");string line;cv::String path_train = "D:/一些文件/python code/AI/新數據集/測試集"; //處理后圖片的保存地址cv::String path_test = "D:/一些文件/python code/AI/新數據集/訓練集"; //處理后圖片的保存地址std::vector<cv::String> filenames_train;std::vector<cv::String> filenames_test;int len_train = path_train.length();int len_test = path_test.length();cv::Mat srcImg;cv::glob(path_train, filenames_train); cv::glob(path_test, filenames_test);if (in) // 有該文件{while (getline(in, line)) // line中不包括每行的換行符{cout << line << endl;string NameOfPic = "";//讀到這一行后,對這一行的字符串進行分割,從而得到文件名for (int i = 2; i < line.size(); i++){if (line[i - 2] == ' ' && line[i - 1] == ' ' && line[i] == ' '){NameOfPic.assign(line, 0, i-2);break;}}cout << NameOfPic << endl;int flag = 0;//在測試集圖片文件夾中尋找,是否能找到一樣的名字的文件for (int i = 0; i < filenames_test.size(); i++) {string path = path_test;path = path + '\\' + NameOfPic;if (path == filenames_test[i]){flag = 1;//追加寫入out_test.open("D:/一些文件/python code/AI/新數據集/test.txt", ios::out | ios::app);out_test << line << endl;out_test.close();break;}}//如果在測試集中沒有找到,說明在訓練集中if (flag == 0){for (int i = 0; i < filenames_train.size(); i++){string path = path_train;path = path + '\\' + NameOfPic;if (path == filenames_train[i]){//追加寫入out_train.open("D:/一些文件/python code/AI/新數據集/train.txt", ios::out | ios::app);out_train << line << endl;out_train.close();break;}}}}}else // 沒有該文件{cout << "no such file" << endl;}system("pause");return 0;}總結
以上是生活随笔為你收集整理的划分数据集代码(按照4:1的比例)以及根据各自文件名写入txt文件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: “羣龙满阶阁”下一句是什么
- 下一篇: 去日本机票多少钱啊?