Biblioteka Open Source C++ do równoległego przetwarzania obrazów
Darmowy interfejs C++ API obsługujący ogólne N-wymiarowe kontenery obrazów, rozszerzony zestaw algorytmów przetwarzania obrazów itd.
Video ++ to potężny, wielowątkowy i wieloplatformowy interfejs API do edycji obrazów C ++, który umożliwia programistom pracę z obrazami i plikami wideo we własnych aplikacjach C ++. Biblioteka jest bardzo łatwa w obsłudze i jest rozwijana z wykorzystaniem nowych funkcji C++11/C++14. Główną ideą stojącą za Video++ jest przeprojektowanie od podstaw struktury przetwarzania obrazu z wykorzystaniem nowego standardu C++.
Jedną wielką cechą biblioteki Video++ jest łatwa definicja jąder równoległego przetwarzania obrazu, które działają do 32 razy szybciej niż naiwna wersja niezoptymalizowana. Biblioteka zawiera kilka ważnych funkcji, takich jak ogólne N-wymiarowe kontenery obrazów, ulepszony zestaw algorytmów przetwarzania obrazu, kolor wypełnienia, lepsze zarządzanie pamięcią, obramowanie wypełnienia, wykorzystanie podobrazów 3D i wiele innych.
Biblioteka zapewnia przydatną funkcję dostępu do kontenerów obrazów, które oferują dostęp do bufora pikseli i innej informacji przydatnej do przetwarzania obrazu. Zapewnia również interoperacyjność z openCV i obsługuje jawne konwersje do i z typów obrazów OpenCV.
Pierwsze kroki z Video++
Użyj następującego polecenia, aby przeprowadzić pełną instalację. Video++ jest tylko nagłówkiem, więc aby uzyskać dostęp do wszystkich niezbędnych funkcji, musisz dołączyć nagłówek vpp.h. Musisz również zainstalować Eigen3 i Boost w swoim systemie przed zainstalowaniem Video++.
Zainstaluj Video++ za pomocą polecenia git
git clone https://github.com/matt-42/vpp.git
cd vpp
./install.sh your_install_prefix # Install iod and vpp in a given prefix
Równoległe przetwarzanie obrazu za pomocą biblioteki C++
Biblioteka Video++ o otwartym kodzie źródłowym umożliwia programistom definiowanie jąder do przetwarzania obrazów równoległych za pomocą poleceń C++. Wspaniałą rzeczą jest to, że jądra mogą działać 32 razy szybciej niż normalne. Równomiernie rozkłada wykonywanie jąder na wszystkie dostępne rdzenie procesora obsługujące kilka wątków działających na kilku rdzeniach. Obsługuje takie funkcje, jak wypełnianie obramowań wartością, wypełnianie lustra obramowania, ustawianie wyrównania, dostęp do pikseli obrazu, stosowanie filtrów na obrazach i tak dalej.
Dodawanie obrazu przez C++
Biblioteka Video ++ o otwartym kodzie źródłowym zapewnia pełną funkcjonalność dodawania obrazów za pomocą filtra pikseli. Oferuje zestaw ogólnych obiektów i procedur, które umożliwiają szybkie pisanie wydajnych implementacji prostych filtrów. Wiele filtrów przetwarzania obrazu to proste funkcje, które wypełniają piksele obliczonymi wartościami, a tym samym nie zawierają zależności między obliczeniami dotyczącymi różnych pikseli.
Dodaj obraz 2D przez C++
int main()
{
using namespace vpp;
image2d img1(make_box2d(100, 200), _border = 3);
image2d img2({100, 200});
assert(&img1(0,0) == &img1[0][0]);
assert(&img1(0,0) == &(*img1.begin()));
assert(img1.domain() == img2.domain());
assert(img1.nrows() == 100);
assert(img1.ncols() == 200);
{
image2d img(make_box2d(5, 5), _border = 1);
assert(&img(0,0) == img.address_of(vint2(0,0)));
assert(&img(4,0) == img.address_of(vint2(4,0)));
auto s1 = img.subimage(img.domain());
assert(&s1(0,0) == s1.address_of(vint2(0,0)));
for (auto p : img.domain())
assert(img(p) == img[p[0]][p[1]]);
for (auto p : img.domain())
assert(img(p) == s1[p[0]][p[1]]);
}
}