使用c/c++利用opnecv批量读取文件夹中的图片,并每张图片都依次保存其rgb信息在文件夹中,并以图片名命名,给出注释
时间: 2024-02-09 12:08:43 浏览: 92
您好,可以使用以下代码来实现批量读取文件夹中的图片,并保存它们的RGB信息为文件:
```c
#include <opencv2/opencv.hpp>
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
using namespace cv;
int main()
{
string folder_path = "/path/to/folder"; // 图片所在文件夹路径
vector<string> file_list; // 文件列表
// 获取文件夹中所有的文件名
glob(folder_path + "/*.jpg", file_list, false);
glob(folder_path + "/*.png", file_list, true);
// 依次读取图片并保存RGB信息
for (size_t i = 0; i < file_list.size(); i++) {
cout << "Processing " << file_list[i] << "... ";
Mat img = imread(file_list[i]);
if (img.empty()) {
cerr << "Failed to read image: " << file_list[i] << endl;
continue;
}
// 获取文件名
string filename = file_list[i].substr(file_list[i].find_last_of("/") + 1);
filename = filename.substr(0, filename.find_last_of("."));
// 保存RGB信息
string save_path = folder_path + "/" + filename + ".txt";
ofstream fout(save_path, ios::out);
for (int y = 0; y < img.rows; y++) {
for (int x = 0; x < img.cols; x++) {
Vec3b pixel = img.at<Vec3b>(y, x);
fout << (int)pixel[0] << " " << (int)pixel[1] << " " << (int)pixel[2] << endl;
}
}
fout.close();
cout << "Done." << endl;
}
return 0;
}
```
具体说明如下:
1. 首先需要包含OpenCV库头文件。
2. 定义一个文件夹路径和一个文件列表,其中文件列表用来存放文件夹中所有的文件。
3. 使用`glob`函数获取文件夹中所有的文件名,其中`false`表示只搜索直接位于文件夹下的文件,`true`表示搜索子文件夹中的文件。
4. 依次读取每张图片并保存其RGB信息,其中获取文件名可以使用`substr`和`find_last_of`函数,保存RGB信息可以使用`ofstream`写入文件。注意,保存的RGB信息可以转为整数形式,也可以转为其他形式。
5. 运行程序即可对文件夹中的所有图片进行处理。
希望这个回答对您有所帮助!
阅读全文