Чтение 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?
Пока что считывание по одному каналу.