自己的項目中需要按照順序讀取多張圖片,論壇上已有的方式大多是通過圖像名稱固定編號,按照編號循序讀取,這種方法雖然簡單有效,可侷限性在於讀取的圖片名必須是連續有限的,比如下面的例子中只能讀取該文件夾下圖片名稱爲[Image_0到Image_9]的圖片。
int n = 0;
string image_name;
vector<Mat>A2;
while (n <= 9)
{
stringstream ss;//int轉換string
string str;
ss << n;
ss >> str;
image_name = ""E:\\Image\\test\\Image_*.bmp";
//cout << image_name << endl;
Mat temp1 = imread(image_name, IMREAD_GRAYSCALE);
if (temp1.data == 0)
{
cout << "沒有圖片" << endl;
exit(0);
}
A2.push_back(src);
n++;
}
還有下面一種方式時按圖像格式讀取圖片,不需要圖像之間前後順序,不在我們的討論範圍。
下面介紹一下自己調試出來的順序讀取方法,借鑑python中按圖片名稱讀取圖片字符串的格式,字符串可以分成幾位,比如“A_B.jpg”字符串長度爲7,也就是七位,在此字符串中的A、B若是變量,那麼我們就可讀取有格式的圖片名稱了。例如“1_5.jpg”,在圖片名稱中有兩個控制循序的變量作爲圖片的索引,此時在opencv的讀圖方式沒啥好方法(本人可能沒看到有高級方法),下面就介紹下名稱中有兩個編號索引的圖片讀取方法。
for (int a = 1; a < 10; a++)
{
for (size_t b = 0; b < 20; b++)
{//b可以設置成最大範圍內的,讀取最後一個圖片名稱時如果小於該範圍,跳出
string name = format(""E:\\Image\\test\\%d_%d.bmp", a, b);
Mat temp = imread(name);
if (temp.data == 0)
break;
else
storeImg.push_back(temp);
}
}
此時就能利用這兩個編號索引按序讀取圖片了。