Boost.GIL
Ogólna biblioteka obrazów Open Source C++
Interfejs C++ API, który wyodrębnia reprezentacje obrazów z algorytmów i obsługuje pracę z prostymi i złożonymi obrazami. Wygeneruj histogram, oblicz gradienty obrazu, splot i ponowne próbkowanie i tak dalej.
Obrazy są podstawową częścią wielu projektów związanych z grafiką, cyfrowym wideo, wizją komputerową i obróbką obrazu. Co więcej, obrazy mogą być reprezentowane na wiele różnych sposobów (przestrzeń kolorów, głębia bitowa, kolejność kanałów, polityka wyrównania itp.). Tak więc praca nad nowym projektem związanym z wizerunkiem, który może być zarówno ogólny, jak i wydajny, jest bardzo trudna. Boost Generic Image Library (GIL) to biblioteka typu open source, która daje programistom możliwość pracy z prostymi i złożonymi obrazami we własnych aplikacjach C++.
Wspaniałą rzeczą w bibliotece Boost.GIL jest to, że abstrahuje ona reprezentacje obrazów od algorytmów i umożliwia pisanie kodu, który może pracować na różnych obrazach z wydajnością porównywalną z pisaniem odręcznym dla określonego typu obrazu. Ułatwia więc pracę programistom, pozwalając im na napisanie kodu raz i działając na dowolnym typie obrazu.
Biblioteka Boost.GIL została zaprojektowana jako uzupełnienie STL i Boost. Kolejnym wspaniałym aspektem biblioteki jest szybkość i elastyczność. Szybkość była kluczowym elementem projektu biblioteki. Możesz łatwo zdefiniować dowolny parametr obrazu w czasie wykonywania przy bardzo niewielkim koszcie wydajności w porównaniu z wieloma innymi bibliotekami. Zapewnia obsługę kilku ważnych funkcji, takich jak piksele niewyrównane do bajtów, obliczanie gradientów obrazu, integracja Boosts, przypisywanie kanału do piksela w skali szarości, splot i ponowne próbkowanie i tak dalej.
Pierwsze kroki z Boost.GIL
Najłatwiejszym sposobem zainstalowania Boost.GIL jest użycie GitHub. Użyj następującego polecenia, aby uzyskać płynną instalację
Zainstaluj Boost.GILvia GitHub.
git clone --https://github.com/boostorg/gil
Czytanie i pisanie obrazów
Histogram to graficzna reprezentacja rozkładu tonalnego na obrazie cyfrowym. W kontekście przetwarzania obrazu histogram obrazu zwykle odnosi się do histogramu wartości intensywności pikseli. Biblioteka Boost.GIL umożliwia twórcom oprogramowania generowanie histogramu we własnej aplikacji przy użyciu kodu C++. Można go wygenerować, zliczając liczbę wartości pikseli, które mieszczą się w każdym pojemniku. Możesz również z łatwością obliczyć histogram jasności obrazu.
Pisanie obrazu przez 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));
}
Operacje na obrazach na poziomie pikseli przy użyciu interfejsu API C++
Biblioteka o otwartym kodzie źródłowym Boost.GIL zapewniła pełne wsparcie dla operacji na obrazach na poziomie pikseli w ich własnych aplikacjach C++. Biblioteka zawiera kilka przydatnych operacji, które umożliwiają użytkownikom obsługę wartości pikseli, wskaźników pikseli i odniesień do pikseli, takich jak kolorowanie piksela, dostęp do kanału, porównywanie dwóch kanałów, konstruowanie stałego wskaźnika płaskiego, konwersja szarej wartości l na RGB , i tak dalej.
Konwertuj przestrzeń kolorów na skalę szarości za pomocą 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);
}
Transformacja obrazu w aplikacjach C++
Biblioteka Boost.GIL o otwartym kodzie źródłowym daje programistom możliwość obracania obrazów za pomocą zaledwie kilku linijek kodu. Boost.GIL obsługuje różne funkcje transformacji obrazu, które mogą wykonywać dowolny obrót wyrównany do osi, odwracać obraz w pionie lub poziomie, wyodrębniać prostokątny obraz podrzędny, stosować konwersję kolorów, specjalne obroty o 90, 180 lub 270 stopni itd. na.
Transformacja obrazu za pomocą C++ API
template
void y_gradient(const SrcView& src, const DstView& dst) {
x_gradient(rotated90ccw_view(src), rotated90ccw_view(dst));
}