Qt中读取所选文件夹下所有图片至vector内

本文展示了如何使用Qt库从指定文件夹中加载并展示多种格式的图片,包括jpg、png和bmp。通过遍历文件夹内的所有图片文件,使用QImage进行加载,并将它们存储在一个向量中以便后续处理。
    vector<QImage> vecImg;
    QString folderName = QFileDialog::getExistingDirectory(this, tr("Open Folder"), QString());
    if (!folderName.isEmpty()) {
        QDir dir(folderName);
        vecImg.clear();
        foreach(QFileInfo imageFileInfo, dir.entryInfoList(QStringList() << "*.jpg" << "*.png" << "*.bmp", QDir::Files, QDir::NoSort))
        {
            QString  imgName = imageFileInfo.absoluteFilePath();
            QImage img(imgName);
            vecImg.push_back(img);
        }
    }


<think>好的,用户的问题是想用C++读取文件夹中的4个图像文件。我需要先理解他的需求,然后提供合适的解决方案。根据用户提供的引用内容,特别是引用[1]中提到的OpenCV的glob函数,这可能是一个有效的方法。 首先,用户可能已经安装了OpenCV,因为引用[1]中的示例代码使用了OpenCV的库。所以,我应该推荐使用OpenCV的glob函数来遍历文件夹中的图像文件。这样可以方便地获取所有符合条件的文件路径,然后逐个读取。 接下来,我需要确保代码示例的正确性。引用[1]中的示例展示了如何读取所有.jpg文件,但用户只需要读取4个文件。可能需要调整通配符或者对文件列表进行截取。比如,使用通配符匹配所有图像,然后只处理前4个文件。不过,如果用户明确知道文件名的模式,可以更精确地指定通配符,例如"folder/*.png"。 另外,用户可能对C++的文件操作不太熟悉,所以代码需要尽量简洁,并包含必要的头文件和命名空间。例如,使用cv::String和vector来存储文件路径和图像数据。同时,需要注意错误处理,比如检查文件是否存在或是否能被正确读取,但用户的问题中没有提到错误处理的需求,可能暂时可以简化。 还要考虑用户是否希望显示图像,如引用[1]中的示例使用了imshow和waitKey,这可能用于调试。但用户可能只需要读取图像到内存中,是否需要显示这部分可以视情况保留或注释掉。 另外,引用[2]和[4]提到Dynamsoft Barcode Reader,但用户的问题是关于读取图像文件,与条形码识别无关,所以可能不需要涉及这些内容。引用[3]提到训练数据的路径和标签文件,但同样不相关,可以忽略。 总结步骤: 1. 使用OpenCV的glob函数获取所有匹配的图像文件路径。 2. 遍历前4个文件路径,读取图像到vector<Mat>中。 3. 提供示例代码,包含必要的头文件和主函数结构。 4. 提醒用户安装OpenCV并配置项目,以及可能的路径问题。 需要验证代码是否正确,比如glob的参数是否正确,读取循环是否限制为4个文件。同时,是否需要处理不同的图像格式,比如png、jpg等,可能需要调整通配符。 最后,生成相关问题,帮助用户深入理解,比如如何处理不同格式、读取指定数量、异常处理等。</think>以下是通过C++读取文件夹中4个图像文件的解决方案,使用OpenCV库实现: ### 实现步骤 1. **配置OpenCV环境** 安装OpenCV 4.x并配置C++项目(VS/Qt等需设置包含目录和库目录) 2. **使用glob函数遍历文件** ```cpp #include <opencv2/opencv.hpp> #include <vector> using namespace cv; using namespace std; vector<Mat> read_4_images(const String& folder_path) { vector<String> filenames; glob(folder_path, filenames, false); // 遍历文件夹 vector<Mat> images; for(size_t i = 0; i < min(filenames.size(), size_t(4)); ++i) { // 最多取4个 Mat img = imread(filenames[i]); if(!img.empty()) { images.push_back(img); } } return images; } ``` 3. **主函数调用示例** ```cpp int main() { String path = "D:/images/*.png"; // 支持通配符 vector<Mat> result = read_4_images(path); cout << "已读取图像数量: " << result.size() << endl; return 0; } ``` ### 关键点说明 1. **glob函数参数**:第三个参数`false`表示不递归搜索子目录[^1] 2. **图像格式支持**:可识别*.jpg、*.png等OpenCV支持的格式 3. **路径格式**:建议使用正斜杠`/`,例如`"C:/test_img/"` ### 优化建议 - 添加格式验证:`if(filenames[i].find(".jpg") != string::npos)` - 异常处理:使用`try-catch`块捕获`imread`异常 - 内存管理:大图像建议使用`std::shared_ptr<Mat>`
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值