Boost.GIL
Загальна бібліотека зображень C++ з відкритим кодом
C++ API, який абстрагує представлення зображень від алгоритмів і підтримує роботу з простими та складними зображеннями. Створення гістограми, обчислення градієнтів зображення, згортання та повторна вибірка тощо.
Зображення є фундаментальною частиною багатьох проектів, пов’язаних із графікою, цифровим відео, комп’ютерним зором і обробкою зображень. Крім того, зображення можуть бути представлені різними способами (колірний простір, бітова глибина, порядок каналів, політика вирівнювання тощо). Тож працювати над новим проектом, пов’язаним із іміджем, який може бути загальним і ефективним, дуже складно. Boost Generic Image Library (GIL) — це бібліотека з відкритим вихідним кодом, яка дає розробникам програмного забезпечення можливість працювати з простими та складними зображеннями у власних програмах C++.
Чудова річ у бібліотеці Boost.GIL полягає в тому, що вона абстрагує представлення зображень від алгоритмів і дозволяє писати код, який може працювати з різними зображеннями з продуктивністю, порівнянною з рукописним текстом для певного типу зображення. Таким чином, це полегшує роботу розробників, дозволяючи їм написати код один раз, і він працює для будь-якого типу зображення.
Бібліотека Boost.GIL створена як комплімент STL і Boost. Ще один чудовий аспект бібліотеки — швидкість і гнучкість. Швидкість була ключовою частиною дизайну бібліотеки. Ви можете легко визначити будь-який параметр зображення під час виконання за дуже незначну вартість продуктивності порівняно з багатьма іншими бібліотеками. Він забезпечує підтримку кількох важливих функцій, таких як пікселі без вирівнювання байтів, обчислення градієнтів зображення, інтеграція Boosts, призначення каналу для пікселів у відтінках сірого, згортка та повторна вибірка тощо.
Початок роботи з Boost.GIL
Найпростіший спосіб інсталювати Boost.GIL за допомогою GitHub. Будь ласка, використовуйте наступну команду для плавного встановлення
Встановіть Boost.GIL через GitHub.
git clone --https://github.com/boostorg/gil
Читання і запис зображень
Гістограма — це графічне зображення розподілу тонів у цифровому зображенні. У контексті обробки зображення гістограма зображення зазвичай відноситься до гістограми значень інтенсивності пікселів. Бібліотека Boost.GIL дозволяє розробникам програмного забезпечення генерувати гістограми у власних програмах за допомогою коду C++. Його можна згенерувати, підрахувавши кількість значень пікселів, які потрапляють у кожен контейнер. Ви також можете легко обчислити гістограму яскравості зображення.
Написання зображення через C++ API
#define png_infopp_NULL (png_infopp)NULL
#define int_p_NULL (int*)NULL
#include
#include
using namespace boost::gil;
int main()
{
rgb8_image_t img(512, 512);
rgb8_pixel_t red(255, 0, 0);
fill_pixels(view(img), red);
png_write_view("redsquare.png", const_view(img));
}
Операції із зображеннями на рівні пікселів за допомогою C++ API
Бібліотека з відкритим вихідним кодом Boost.GIL забезпечила повну підтримку операцій із зображеннями на рівні пікселів у їхніх власних програмах C++. Бібліотека містить деякі корисні операції, які дозволяють користувачам обробляти піксельні значення, піксельні покажчики та посилання на пікселі, такі як фарбування пікселя, доступ до каналу, порівняння двох каналів, побудова постійного планарного покажчика, перетворення сірого l-значення на RGB , і так далі.
Перетворення колірного простору в градації сірого за допомогою C++
template
void x_luminosity_gradient(SrcView const& src, DstView const& dst)
{
using gray_pixel_t = pixel::type, gray_layout_t>;
x_gradient(color_converted_view(src), dst);
}
Трансформація зображення в програмах C++
Бібліотека Boost.GIL з відкритим кодом дає програмістам можливість обертати зображення за допомогою лише кількох рядків коду. Boost.GIL підтримує різноманітні функції трансформації зображення, які можуть виконувати будь-яке обертання за осями, перевертати зображення вертикально чи горизонтально, витягувати прямокутне підзображення, застосовувати перетворення кольорів, спеціальні повороти на 90, 180 або 270 градусів тощо. на.
Трансформація зображення через C++ API
template
void y_gradient(const SrcView& src, const DstView& dst) {
x_gradient(rotated90ccw_view(src), rotated90ccw_view(dst));
}