Bibliotecă C++ cu sursă deschisă pentru procesarea paralelă a imaginilor
API-ul C++ gratuit care acceptă containere de imagini N-dimensionale generice, un set îmbunătățit de algoritmi de procesare a imaginilor și așa mai departe.
Video++ este un puternic API de editare a imaginilor C++ multi-threaded și multiplatformă, care permite dezvoltatorilor de software să lucreze cu imagini și fișiere video în propriile aplicații C++. Biblioteca este foarte ușor de manevrat și este dezvoltată profitând de noile caracteristici ale C++11/C++14. Ideea principală din spatele Video++ este reproiectarea de la zero a unui cadru de procesare a imaginii, profitând de noul standard C++.
O caracteristică excelentă a bibliotecii Video++ este definirea ușoară a nucleelor de procesare a imaginilor paralele, care rulează de până la 32 de ori mai rapid decât versiunea naivă neoptimizată. Biblioteca a inclus câteva caracteristici importante, cum ar fi containere generice de imagini N-dimensionale, un set îmbunătățit de algoritmi de procesare a imaginii, culoarea de umplere, o gestionare mai bună a memoriei, chenarul de umplere, utilizarea sub-imagini 3D și multe altele.
Biblioteca a oferit o caracteristică utilă pentru accesarea containerelor de imagini care oferă acces la tamponul de pixeli și la o altă informație utilă pentru procesarea imaginii. De asemenea, oferă interoperabilitate cu openCV și acceptă conversii explicite către și de la tipurile de imagini OpenCV.
Noțiuni introductive cu Video++
Vă rugăm să utilizați următoarea comandă pentru o instalare completă. Video++ are doar antet, așa că pentru a accesa toate caracteristicile necesare, trebuie să includeți antetul vpp.h. De asemenea, trebuie să obțineți Eigen3 și Boost pe sistemul dumneavoastră înainte de a instala Video++.
Instalați Video++ prin comanda 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
Procesare paralelă a imaginilor prin biblioteca C++
Biblioteca Video++ open source permite dezvoltatorilor de software să definească nuclee pentru procesarea imaginilor paralele folosind comenzi C++. Lucrul grozav este că nucleele pot rula de 32 de ori mai repede decât cele normale. Acesta răspândește în mod egal execuția nucleelor pe toate nucleele CPU disponibile care rulează mai multe fire de execuție care rulează pe mai multe nuclee. Acceptă funcții precum umplerea chenarelor cu valoare, umplerea oglinzii chenarului, setarea alinierii, accesarea pixelilor imaginii, aplicarea filtrelor pe imagini și așa mai departe.
Adăugarea imaginii prin C++
Biblioteca Video++ cu sursă deschisă a oferit funcționalitate completă pentru adăugarea de imagini folosind filtrul în funcție de pixeli. Oferă un set de obiecte și rutine generice care permit scrierea rapidă a implementărilor eficiente ale filtrelor simple. Multe filtre de procesare a imaginii sunt funcții simple care umple pixelii cu valori calculate, nefiind astfel dependențe între calculele cu privire la diferiți pixeli.
Adăugați imagine 2D la 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]]);
}
}