Чтение png с помощью boost gil

Задача: Есть 33 директории, в каждой по 400 png размером 278*278, необходимо считывать по 1 рандомной из каждой директории и записывать в вектор.

Моя реализация устроенна так:

setlocale(LC_ALL, "Russian");
rgb8_image_t img;
string path;
boost::container::vector<uint16_t> vec;//png
vec.reserve(278*278);
vector<boost::container::vector<uint16_t>> png;//хранилище png
png.reserve(33);

boost::filesystem::path letters("G:/C++zadani9/neiroCPP/neiroCPP/Russians");
boost::filesystem::directory_iterator it(letters);

for (auto el : it)
{
    boost::filesystem::directory_iterator itlet(el);
    for (size_t i = 0; i < rand()%400; i++)//получение рандомного итератора
    {
        itlet++;
    }
    path = itlet.operator->()->path().string();
    cout << path << endl;
    //считывание запись
    read_and_convert_image(path, img, png_tag{});
    for (size_t i=0; i < img.height(); i++)
    {
         for (size_t j = 0; j < img.width(); j++)
         {
            vec.push_back((view(img)(i, j)[0]));
         }
    }
    png.push_back(vec);
    vec.clear();
}

Данный метод решения справляется с задачей, но довольно медленно. Недавно начал изучать gil и интересуюсь как можно реализовать это более правильно и быстро? И как сюда можно встроить copy_pixels?

Пока что считывание по одному каналу.


Ответы (0 шт):