ZBLOG

使用图像时,无法读取一个文件夹的bmp图片 bool utils::setInputStream(const utils::InputStream& source, const std::string& imagePath, const std::string& videoPath, const int& cameraID, cv::VideoCapture& capture, int& totalBatches, int& delayTime, utils::InitParameter...

在你的代码中,如果无法读取文件夹中的 BMP 图片,可能有几个原因。以下是一些常见的问题和解决方案:

  1. 路径问题

    • 确保 imagePath 变量包含正确的 BMP 图片路径。如果你想读取一个文件夹中的所有图片,你需要遍历该文件夹,并为每个图像生成完整的路径。
  2. 格式检查

    • 你的代码当前只检查了给定的单个 imagePath 的后缀。如果你传入的是一个文件夹而不是单个文件,这种检查将无法正常工作。
    • 如果要处理整个目录下的图片,请考虑使用 std::filesystem 库(C++17)或其他方法来列出目录中的所有 BMP 文件。
  3. OpenCV 方法

    • 确保 cv::VideoCapture 可以打开的实际上是一个单一的 BMP 文件,而不是一个目录。如果输入是目录,你需要修改代码以遍历该目录并对每个图像调用 capture.open(imagePath)
  4. 调试信息

    • 在尝试打开图像之前,添加一些调试信息来输出实际要打开的路径,以确保它们是正确的。
  5. 示例代码修改

如果你想从一个指定的文件夹中加载所有 BMP 图像,可以参考以下示例:

#include <filesystem>
#include <vector>

// 获取指定文件夹下所有BMP文件
std::vector<std::string> getBmpFiles(const std::string& folderPath) {
    std::vector<std::string> bmpFiles;
    for (const auto& entry : std::filesystem::directory_iterator(folderPath)) {
        if (entry.is_regular_file() && (entry.path().extension() == ".bmp" || entry.path().extension() == ".BMP")) {
            bmpFiles.push_back(entry.path().string());
        }
    }
    return bmpFiles;
}

bool utils::setInputStream(const utils::InputStream& source, const std::string& imagePath, const std::string& videoPath,
                           const int& cameraID, cv::VideoCapture& capture, int& totalBatches,
                           int& delayTime, utils::InitParameter& param)
{
    int total_frames = 0;

    switch (source)
    {
        case utils::InputStream::IMAGE: {
            // 如果 imagePath 是一个目录,获取其中所有bmp文件
            if (std::filesystem::is_directory(imagePath)) {
                auto bmpFiles = getBmpFiles(imagePath);
                if (!bmpFiles.empty()) {
                    // 这里假设我们只打开第一个找到的BMP图像
                    capture.open(bmpFiles[0]); 
                    param.batch_size = 1; 
                    total_frames = static_cast<int>(bmpFiles.size()); 
                    totalBatches = total_frames; 
                }
            } else {
                // 单独处理提供的具体图片路径
                capture.open(imagePath);
                param.batch_size = 1;
                total_frames = 1;
                totalBatches = 1;
            }
            delayTime = 0;
            break;
        }
        case utils::InputStream::VIDEO:
            capture.open(videoPath);
            total_frames = static_cast<int>(capture.get(cv::CAP_PROP_FRAME_COUNT));
            totalBatches = (total_frames % param.batch_size == 0) ?
                (total_frames / param.batch_size) : (total_frames / param.batch_size + 1);
            break;
        case utils::InputStream::CAMERA:
            capture.open(cameraID);
            total_frames = INT_MAX; 
            totalBatches = INT_MAX; 
            break;
        default:
            break;
    }

    param.src_h = static_cast<int>(capture.get(cv::CAP_PROP_FRAME_HEIGHT));
    param.src_w = static_cast<int>(capture.get(cv::CAP_PROP_FRAME_WIDTH));

    return capture.isOpened();
}

这样修改之后,程序可以检测是否传入的是一个目录,并读取其中所有 .bmp 文件。请根据需要调整逻辑来满足你的具体需求。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=20817

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?