我遇到了有关按顺序访问图像的问题。我的图像的名称随递增的数字而变化,即cube_0.jpg,cube_1.jpg,....等等。现在我想逐个访问每个图像并显示。 以下是我在2天内玩的代码,并且不知道如何处理这种情况或者这个问题出了什么问题。
ostringstream s;
for (int fileNumber = 0; fileNumber<=40; fileNumber++)
{
s<<"\"cube_"<<fileNumber<<"\.jpg\""<<endl;
string fullfileName(s.str());
images[i] = fullfileName;
}
stringstream ss;
cout<<"file name"<<images[0]<<endl;
for (int file = 0; file<41; file++)
{
string str = images[file];
cout<<"str "<<str<<endl;
img_raw = imread(ss.str(), 1); // load as color image Error
cout<<"Done"<<endl<<"size"<<img_raw.size();
system("pause");
}
此代码运行正常,直到达到&#34; img_raw = imread(ss.str())&#34;,现在这行基本上阻碍了我访问文件。由于imread需要&#34; string&amp;文件名&#34;因此我执行了字符串流操作,但没有任何工作!
非常感谢任何帮助!
答案 0 :(得分:0)
有一些错误。
您的stringstream ss
为空。你宣布它但没有填写任何值。我很确定您的意思是imread(str, 1);
而不是imread(ss.str(), 1);
在第一个 for 循环中,你不断地将文件名打印到ostringstream,所以它是这样的:
0:“cube_0.jpg \”
1:“cube_0.jpg \”“cube_1.jpg \”
2:“cube_0.jpg \”“cube_1.jpg \”“cube_2.jpg \”
...
所以ostringstream只是增长和增长。需要在循环中声明ostringstream以便在每次迭代时清除它。
已编辑的代码:
string images[41];
Mat img_raw;
for (int fileNumber = 0; fileNumber < 41; fileNumber++)
{
stringstream ss;
ss << "\cube_" << fileNumber << "\.jpg" << endl;
string fullfileName;
ss >> fullfileName;
images[fileNumber] = fullfileName;
}
for (int file = 0; file < 41; file++)
{
cout << "Loading " << images[file] << endl;
img_raw = imread(images[file], 1);
if (!img_raw.empty())
{
cout << "Successfully loaded " << images[file] << " with size " << img_raw.size() << endl;
}
else
{
cout << "Error loading file " << images[file] << endl;
}
system("pause");
}