给定图像文件
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/