目的:逐个读取单个文件夹中的所有图片,处理后保存到另一文件夹中。
途径:使用glob函数,用string字符串读取路径
代码:
#include <iostream>
#include <opencv2/opencv.hpp>
#include <windows.h>
using namespace cv;
using namespace std;
int main()
{
string InputPath = "E:\\Graduate\\02字符识别\\DataSets\\01Input\\aa\\*.jpg";//指定路径,精确到最后一个文件夹,图片带格式,名称用*
vector<String> InputFiles;//定义一个字符串数组作为输入文件
glob(InputPath, InputFiles);//用glob函数将输入路径与输入文件联系起来
if (InputFiles.size() == 0)//检验是否有图片
{
cout << "No image files[jpg]" << endl;
return 0;
}
for (int i = 0; i < InputFiles.size(); i++)//image_file.size()代表文件中总共的图片个数
{
Mat src = imread(InputFiles[i]);
/*-----------------开始处理-------------------*/
imshow("src", src);
/*-----------------结束处理-------------------*/
string OutputPath = "E:\\Graduate\\02字符识别\\DataSets\\00TestOutput\\" + to_string(i) + ".bmp";
imwrite(OutputPath, src);
waitKey(5);
}
waitKey(0);
}
注意:
1.输入路径精确到最后一个文件夹,用“*”表示原图片名,后面添加原图片格式,图片名称可以随意,不用重新命名从0开始。
string InputPath = "E:\\Graduate\\02字符识别\\DataSets\\01Input\\aa\\*.jpg";
2.输出图片格式分三部分:输出文件路径+文件命名方式(这里命名是从0开始)+输出文件格式(可以不和原图片格式一样)
string OutputPath = "E:\\Graduate\\02字符识别\\DataSets\\00TestOutput\\" + to_string(i) + ".bmp";
3.路径名一定要用“\\”隔开,不能用"\"。
4.处理部分的函数可以自行添加,只用在最后的输出路径处把src改成想要输出的图片即可