使用c++读取文件夹中的图像,并将图像保存到另一个文件夹中
时间: 2024-09-13 20:03:42 浏览: 93
在C++中,你可以使用标准库中的一些功能,比如`<filesystem>`(C++17引入的库)来读取文件夹内容,以及第三方库如OpenCV来处理图像。以下是一个使用C++和OpenCV库读取一个文件夹中的所有图像,并将它们保存到另一个文件夹中的简单示例。
首先,确保你已经安装了OpenCV库,因为标准C++库不直接支持图像处理。接下来是使用这些库进行文件读取和图像处理的代码示例:
```cpp
#include <iostream>
#include <filesystem>
#include <opencv2/opencv.hpp>
namespace fs = std::filesystem;
int main() {
// 源文件夹路径
fs::path sourcePath = "/path/to/source/folder";
// 目标文件夹路径
fs::path targetPath = "/path/to/target/folder";
// 确保目标文件夹存在,如果不存在则创建
if (!fs::exists(targetPath)) {
fs::create_directories(targetPath);
}
// 遍历源文件夹中的所有文件
for (const auto& entry : fs::directory_iterator(sourcePath)) {
// 获取文件的完整路径
fs::path filePath = entry.path();
// 确保是文件且后缀是图像类型(如.jpg, .png等)
if (fs::is_regular_file(entry) && entry.path().extension() == ".jpg") {
// 使用OpenCV读取图像
cv::Mat image = cv::imread(filePath.string(), cv::IMREAD_COLOR);
if (!image.empty()) {
// 构建目标文件路径
fs::path targetFilePath = targetPath / filePath.filename();
// 使用OpenCV保存图像到目标文件夹
cv::imwrite(targetFilePath.string(), image);
std::cout << "图像已复制到:" << targetFilePath << std::endl;
} else {
std::cerr << "无法读取图像文件:" << filePath << std::endl;
}
}
}
return 0;
}
```
上述代码首先定义了源文件夹和目标文件夹的路径,然后使用`std::filesystem`命名空间下的`directory_iterator`来遍历源文件夹中的所有文件。对于每一个文件,如果它是一个常规文件并且扩展名为`.jpg`(这里假设我们只处理JPEG图像,你也可以添加其他扩展名如`.png`等),代码将使用OpenCV的`imread`函数读取图像,并使用`imwrite`函数将图像保存到目标文件夹。
请确保你的编译器支持C++17标准,因为`<filesystem>`是C++17中引入的。同时,在编译时需要链接OpenCV库。
阅读全文