zl程序教程

您现在的位置是:首页 >  其他

当前栏目

图像训练时文件夹批量测试

训练批量测试 图像 文件夹
2023-09-14 09:14:39 时间

智能型操作方法:

方法一:

1.批量生成文件目录
如果你有n个文件夹目录,每个目录下有一定数据集
在这里插入图片描述
在此目录下新建list.txt文件,打开输入

//在txt文件中输入
dir *.* /b >list.txt

然后另存为list.bat文件,双击.bat文件,打开txt会生成相应文件夹目录
在这里插入图片描述
2.文件读取
路径读取

int readlist(string in_list,vector<string>&result)
{
    ifstream in_file(in_list);
    if(!in_file.is_open())
    {
        cout<<"file read error"<<endl;
        return -1;
    }
    string temp;
    while(getline(in_file,temp)
    {
        results.push_back(temp);
    }
    return 0;
}

//引用
vector<string>file_vec;
string in_list="D:\\project\\test\\list.txt";
read_list(in_list,file_vec);

file_vec中存放的将是文件夹名称组成的集合,如上图txt中所示

读取图像
图像名字按照n*n矩阵s型排列命名

//图像格式如:0_0_0.tiff 1_0_1.tiff
string in_dir0="D:\\project\\test\\";
int m=5;
int n=5;
for(string line:file_vec)
{
    string in_dir=in_dir0+line+"\\";
    //表示图像名称后两个数字
    int curr_m=0;  //行
    int curr_n=0;  //列
    int d=1;
    Point curr_direction(0,1);
    for(int i=0;i<18;i++)
    {
        string name=to_string(i)+"_"+to_string(curr_m)+"_"+to_string(curr_n)+"tiff";
        string imgpath=in_dir+name;
        cout<<imgpath<<endl;
        ifstream f(imgpath.c_str());
        if(!f.good())
        {
            break;
        }
        Mat src=imread(imgpath);
        //下一张图
        if(d>0)
        {
            if(curr_n<n-1)
            {
                curr_n+=d;
                curr_direction=Point(1,0);
            }
            else{
                d=-d;
                curr_m+=1;
                curr_direction=Point(0,1);
            }
        }
        else{
            if(curr_n>0)
            {
                curr_n+=d;
                curr_direction=Point(-1,0);
            }
            else{
                curr_m+=1;
                d=-d;
                curr+direction=Point(0,1);
            }
        }
    }
}
    

方法二:

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <iostream>
#include <fstream>
 
int main() {
	cv::String path = "E:/Data Sets/ORIGINAL/data_road_fisheye/training/label/";        //待处理图片文件夹地址
	cv::String dest = "E:/Data Sets/ORIGINAL/data_road_fisheye/training/greylabel/";    //处理后图片的保存地址
	cv::String savedfilename;
	std::vector<cv::String> filenames;
	cv::Mat srcImg, dstImg;
 
	cv::glob(path, filenames);                 //opencv里面用来读取指定路径下文件名的一个很好用的函数
	for (int i = 0; i < filenames.size(); i++) {
		srcImg = cv::imread(filenames[i]);
		cv::cvtColor(srcImg, dstImg, CV_RGB2GRAY);
		savedfilename = dest + filenames[i].substr(55);    
		std::cout << savedfilename << std::endl;
		cv::imwrite(savedfilename, dstImg);
	}
	return 0;
}

补充:读取txt文件进行批处理:

#include<fstream>
#include<string>

using namespace std;
using namespace cv;

string path= "F:\\...\\";
string save_path= "F:\\...\\";

int main()
{
	string txt_path = "F:\\abc.txt";
	ifstream sample;
	sample.open(txt_path.data());
	assert(sample.is_open());
	vector<string>imgnames;
	string imgname;
	int i = 0;
	while (getline(sample, imgname))
	{
		imgnames.push_back(imgname);
		//cout << imgname << endl;
		Mat src, dst;
		src = imread(imgname);
		Gamma_(src, dst, 128);
		string savename = save_path + to_string(i) + ".tiff";
		cout << savename  << endl;
		imwrite(savename, dst);
		i++;
	}
}

beautiful!