这种方法的好处是不用管文件名类型
CV_EXPORTS void glob(String pattern, std::vector& result, bool recursive = false);
0. 直接调用系统函数命名,提升速度
#include <iostream>
#include <opencv2/opencv.hpp>
#include <string>
//通过注释选择平台
//#define __WIN32__
//#define __linux__ //linux自带这个宏
using namespace cv;
using namespace std;
/********************使用前修改路径***********************/
string patternFiles = "/home/anan/Desktop/20201217calib/0/*.jpg";//修改路径
/********************************************************/
#if defined(__WIN32__)//跨平台
std::string pathPrefix = patternFiles.substr(0, patternFiles.rfind('\\') + 1);//获取文件路径前缀
#elif defined(__linux__)//跨平台
std::string pathPrefix = patternFiles.substr(0, patternFiles.rfind('/') + 1);//获取文件路径前缀
#endif
int main() {
cout<<patternFiles<<endl;
vector<cv::String> filePath;
cv::glob(patternFiles, filePath, false);
int filesNum = filePath.size();//获取文件数量,并且自动设置重命名的数字宽度
cout<<filesNum<<endl;
for (int i = 0; i < filePath.size(); i++) {
std::string pathSuffix = filePath[i].substr(filePath[i].rfind('.'));//获取文件路径后缀
std::ostringstream newName;//通过字符串流来生成指定的路径
newName << pathPrefix << "left" <<i << pathSuffix;
int renameFlag = rename(filePath[i].c_str(), newName.str().c_str());//重命名并返回值
cout << filePath[i] << " --> " << newName.str() << " result=" << (!renameFlag)<< endl;
}
return 0;
}
下面是之前的方法比较笨
1. windows
#include <iostream>
#include <opencv2\opencv.hpp>
#include<string>
#include<vector>
using namespace cv;
using namespace std;
int main()
{
char jpg[150] = {};
string pattern_img;
vector<cv::String> image_files;
vector<Mat> images;
vector<Mat> img;
pattern_img = "E:\\...\\*.jpg";
//cout << pattern_img << endl;
cv::glob(pattern_img, image_files, false);
cout << image_files.size() << endl;
for (int i = 0; i < image_files.size(); i++)
{
images.push_back(imread(image_files[i]));
resize(images[i], images[i], Size(640, 480));
imshow("img", images[i]);
sprintf_s(jpg, "E:\\...\\%06d.jpg", i);
imwrite(jpg, images[i]);
//waitKey(10);
}
system("psual");
}
2. ubuntu
#ifndef CHANGNAME_H
#define CHANGNAME_H
#include <iostream>
#include<opencv2/core/core.hpp>
#include<opencv2/highgui.hpp>
#include<string>
#include<vector>
using namespace cv;
using namespace std;
void changname()
{
char jpg[150] = {};
string pattern_img;
vector<cv::String> image_files;
vector<Mat> images;
vector<Mat> img;
pattern_img = "/home/jinln/jinln/DATASET/baslerstereodata/20201104/2020110403/2/*.png";
//cout << pattern_img << endl;
cv::glob(pattern_img, image_files, false);
cout << image_files.size() << endl;
for (int i = 0; i < image_files.size(); i++)
{
images.push_back(imread(image_files[i]));
//resize(images[i], images[i], Size(640, 480));
imshow("img", images[i]);
sprintf(jpg, "/home/jinln/jinln/DATASET/baslerstereodata/20201104/2020110403/2/%06d.png", i);
imwrite(jpg, images[i]);
//waitKey(10);
}
}
#endif // CHANGNAME_H