OpenCV-记录02:遍历文件图片的N种方法
/*************************************************************************
*@ubuntu16.04
*@OpenCV 3.4.5
*@Time:2020.1.2
*@Author:Way
*@GitHub:https://github.com/Waycn
************************************************************************/
方法1:以文本文件的格式批量读取图像
int main()
{
//--方法1
int i=0;
ifstream fin("data.txt"); //包含图像路径的文件
//[c++输入文件流ifstream用法详解](https://blog.csdn.net/sinat_36219858/article/details/80369255)
string filename;
while (getline(fin,filename))
{
//读取图片,改变图片大小
Mat image=imread(filename);
resize(image,image,Size(817,817));
//保存处理后的图片
string s = "../picture/" + to_string(i) + ".png";//根据自己路径适当修改
imwrite(s,image);
i++;
}
}
方法2:一定规律命名的图像
int main()
{
//--方法2
Mat image;
string image_name;//图片路径
int n=0;
int NUM=43;//图片的数量
while(n<=NUM)
{
stringstream ss;//int 转换string
//[stringstream常见用法介绍](https://blog.csdn.net/liitdar/article/details/82598039)
string str;
ss<<n;
ss>>str;
image_name=str;
image_name="../picture/"+image_name+".jpg";
//读取图片、修改大小
Mat image=imread(image_name);
resize(image,image,Size(817,817));
//保存修改后的图片
string s = "../" + to_string(n) + ".png";
imwrite(s,image);
n++;
}
方法3:
int main()
{
std::string pattern = "../marker/*.jpg";
std::vector<cv::String> result;//注意:类型必须是cv::String
cv::glob(pattern,result);
/*
*void glob(String pattern, std::vector<String>& result, bool recursive = false);
*@false只遍历指定文件夹符合条件的
*@true会遍历文件夹下的子文件夹
*/
if(result.size()==0)
std::cout<<"No Image Files[png]"<<std::endl;
for (int i=0;i<result.size();i++)
{
Mat image =cv::imread(result[i]);
cout <<result[i]<<endl;
resize(image,image,Size(817,817));
string s = "../" + to_string(i) + ".png";
imwrite(s,image);
}
}