在VS上运行代码:
#include <opencv2/core/core.hpp>
#include <opencv2/imgcodecs.hpp>
#include <opencv2/opencv.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <iostream>
#include <io.h>
using namespace cv;
using namespace std;
vector<string> files;
String in_path = "./demo/trainB"; //要修改的文件夹
std::string out_path = "./demo/trainB1/"; //要保存图片文件夹
void getFiles(string path, vector<string>& files);
int main(int argc, char** args) {
Mat change_size;
getFiles(in_path, files);
for (int i = 0; i < files.size(); i++)
{
std::string out_path_end = out_path;
cout << files[i].c_str() << endl;
Mat image = imread(files[i].c_str(), IMREAD_COLOR);
if (image.empty()) {
cout << "could not find the image" << std::endl;
_sleep(1000);
return -1;
}
resize(image, change_size, Size(256, 256), 0, 0, INTER_LINEAR);
out_path_end.append(to_string(i));
out_path_end.append(".jpg");
cout << out_path_end << std::endl;
// _sleep(1000);
imwrite(out_path_end, change_size);
}
//delete out_put_dir;
//namedWindow("image", CV_WINDOW_AUTOSIZE);
//imshow("image", change_size);
waitKey(0);
return 0;
}
void getFiles(string path, vector<string>& files)
{
//文件句柄
//long hFile = 0; //win7
intptr_t hFile = 0; //win10
//文件信息
struct _finddata_t fileinfo;
string p;
if ((hFile = _findfirst(p.assign(path).append("\\*").c_str(), &fileinfo)) != -1)
// "\\*"是指读取文件夹下的所有类型的文件,若想读取特定类型的文件,以png为例,则用“\\*.png”
{
do
{
//如果是目录,迭代之
//如果不是,加入列表
if ((fileinfo.attrib & _A_SUBDIR))
{
if (strcmp(fileinfo.name, ".") != 0 && strcmp(fileinfo.name, "..") != 0)
getFiles(p.assign(path).append("\\").append(fileinfo.name), files);
}
else
{
files.push_back(path + "\\" + fileinfo.name);
}
} while (_findnext(hFile, &fileinfo) == 0);
_findclose(hFile);
}
}