如何按顺序读取文件下的所有图片
时间: 2024-09-08 22:03:57 浏览: 48
java 按顺序读取文件
4星 · 用户满意度95%
在C++中,如果你想按照特定顺序(如文件名、时间戳等)读取文件夹下的所有图片,可以借助标准库和文件系统的操作。下面是一个简单的示例,基于文件名排序:
```cpp
#include <iostream>
#include <filesystem>
#include <vector>
#include <algorithm>
std::string folder_path = "your_image_folder_path"; // 图片文件夹路径
std::vector<cv::Mat> images; // 存储图片的容器
void load_images(std::filesystem::path dir) {
for (const auto& entry : std::filesystem::directory_iterator(dir)) {
if (entry.is_regular_file() && entry.path().extension() == ".bmp" || ".jpg" || ".png") {
cv::Mat image;
if (cv::imread(entry.path(), cv::IMREAD_COLOR) != nullptr) {
images.push_back(image);
std::cout << "Loaded image: " << entry.path().filename() << "\n";
} else {
std::cerr << "Failed to load image: " << entry.path() << "\n";
}
}
}
}
int main() {
std::filesystem::create_directory(folder_path + "/sorted_images"); // 创建存放排序后的图片文件夹
// 遍历文件夹并加载图片到vector
load_images(folder_path);
// 根据图片文件名排序
std::sort(images.begin(), images.end(),
[](const cv::Mat& img1, const cv::Mat& img2) {
return img1.loadedImageName() < img2.loadedImageName(); // 假设loadedImageName()返回图片文件名
});
// 将排序后的图片保存到新文件夹
for (size_t i = 0; i < images.size(); ++i) {
std::string sorted_path = folder_path + "/sorted_images/" + std::to_string(i) + "_" + images[i].loadedImageName();
cv::imwrite(sorted_path, images[i]);
}
return 0;
}
```
这个示例先将图片加载到一个`vector`中,然后根据自定义的比较函数(这里是文件名)对图片进行排序,最后将排序后的图片保存到新的文件夹。
阅读全文