使用c++读取a文件夹底下的图片,对每张图片做二值化处理后,然后保存新的二值化图片到文件夹底下,并将每个图像的文件名称输出到csv里进行保存
时间: 2024-09-13 20:11:02 浏览: 35
在C++中,你可以使用标准库中的文件系统库(C++17引入的`<filesystem>`)来遍历文件夹和操作文件,同时使用图像处理库如OpenCV来进行图片的读取、二值化处理和保存。以下是一个基本的步骤说明:
1. 包含必要的头文件。
2. 使用`std::filesystem`命名空间下的函数遍历`a`文件夹。
3. 对于每个找到的图片文件:
- 使用OpenCV函数读取图片。
- 对图片执行二值化处理。
- 将二值化后的图片保存到原文件夹或新位置。
- 将处理后的图片文件名写入CSV文件。
下面是一个简化的代码示例:
```cpp
#include <opencv2/opencv.hpp>
#include <filesystem>
#include <fstream>
namespace fs = std::filesystem;
int main() {
std::string folderPath = "a";
std::string extension = ".jpg"; // 或者其他图片格式
std::string csvPath = "output.csv";
// 打开CSV文件准备写入
std::ofstream csvFile(csvPath);
if (!csvFile.is_open()) {
std::cerr << "无法打开文件:" << csvPath << std::endl;
return -1;
}
// 遍历文件夹
for (const auto& entry : fs::directory_iterator(folderPath)) {
if (entry.path().extension() == extension) {
// 读取图片
cv::Mat img = cv::imread(entry.path().string(), cv::IMREAD_COLOR);
if (img.empty()) {
std::cerr << "无法读取图片:" << entry.path() << std::endl;
continue;
}
// 二值化处理
cv::Mat binaryImg;
cv::cvtColor(img, binaryImg, cv::COLOR_BGR2GRAY);
cv::threshold(binaryImg, binaryImg, 128, 255, cv::THRESH_BINARY);
// 保存二值化后的图片
std::string binaryImgPath = entry.path().string().substr(0, entry.path().string().length() - extension.length()) + "_binary" + extension;
cv::imwrite(binaryImgPath, binaryImg);
// 写入文件名到CSV
csvFile << entry.path().filename() << std::endl;
}
}
// 关闭CSV文件
csvFile.close();
return 0;
}
```
请注意,这段代码需要OpenCV库的支持,并且假设所有图片都是彩色的JPEG图片。对于不同的图片格式,可能需要调整读取和保存的方式。此代码仅提供一个基本的框架,实际应用中可能需要添加错误处理和优化性能等。
阅读全文