c++ - 使用 opencv 在 C++ 中读取图像文件序列 w/o

标签 c++

给定图像文件

lights000.rgbe
lights001.rgbe
lights002.rgbe
...
lights899.rgbe

都位于一个子文件夹中。先读取一个文件再读取下一个文件的最佳方式是什么?

鉴于我对 .rgbe 的读取命令称为 readHDR(char* filename)

我已经看到几个关于这个问题的问题,但他们都使用 OpenCV。我没有使用 opencv,.rgbe 甚至不是受支持的 OpenCV 文件扩展名,因此该方法甚至无法工作。

我从另一个问题中看到了以下代码:

char* Dataset_Dir( "C:/Data/" ); // Or take it from argv[1]
cv::Mat normal_matrix;
std::vector<cv::Mat>* image_stack;
for( int i=1; i<=endNumber; ++i )
{
    // Gives the entire stack of images for you to go through
    image_stack->push_back(cv::imread(std::format("%s/%03d-capture.png", Dataset, i), CV_LOAD_IMAGE_COLOR)); 

    normal_matrix = cv::imread(std::format("%s/%03d-capture.png", Dataset, i), CV_LOAD_IMAGE_COLOR);
}

但我找不到任何关于 std::format 命令或 Dataset_Dir 的信息。

关于如何将文件名字符串分成三部分的任何建议都会非常有帮助。

拆分成:

 char Name = "lights";
 int Num  = "000";
 char File = ".rgbe;

最佳答案

这是一个简单的解决方案,如何根据您指定的标准拆分文件名字符串:

#include <iostream>
#include <string>
#include <sstream>

using namespace std;

int main() {
    istringstream filename("lights042.rgbe");
    string Name;
    int Num;
    string File;

    while(filename && !isdigit(filename.peek())) {
        char c;
        filename >> c;
        Name += c;
    }

    filename >> Num;
    filename >> File;

    cout << "Name = '" << Name << "'" << endl;
    cout << "Num = " << Num << endl;
    cout << "File = '" << File << "'" << endl;

    return 0;
}

输出

Name = 'lights'
Num = 42
File = '.rgbe'

参见 live demo请。

关于c++ - 使用 opencv 在 C++ 中读取图像文件序列 w/o,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26224991/

相关文章:

c++ - 类和静态变量

c++ - 编译器优化如何影响缓存不友好的算法?

C++ 散列用 new 设置错误的分配

c++ - 从 C++ 字符串中删除特殊字符(' 和 - 除外)

c++ - Python 中 C++ 编译器标志的等效功能是什么?

c++ - 之前未调用函数时出错

c++ - AVX __m256i 有符号 32 位元素的整数除法

c++ - 跨 MSVCRT 版本分配 C++ 对象

c++ - 如果我按值从函数返回一个 STL 容器,GCC 会单独复制所有元素吗?

c++ - typedef 在 CUDA 中无法识别