opencv以圖片名稱爲索引順序讀取多張圖片

自己的項目中需要按照順序讀取多張圖片,論壇上已有的方式大多是通過圖像名稱固定編號,按照編號循序讀取,這種方法雖然簡單有效,可侷限性在於讀取的圖片名必須是連續有限的,比如下面的例子中只能讀取該文件夾下圖片名稱爲[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);
        }
    }

此時就能利用這兩個編號索引按序讀取圖片了。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章