Open source C++-bibliotheek voor parallelle beeldverwerking
Gratis C++ API die generieke N-dimensionale afbeeldingscontainers, verbeterde set beeldverwerkingsalgoritmen, enzovoort ondersteunt.
Video++ is een krachtige multi-threaded en platformonafhankelijke C++ beeldbewerkings-API waarmee softwareontwikkelaars kunnen werken met afbeeldingen en videobestanden in hun eigen C++-toepassingen. De bibliotheek is zeer gebruiksvriendelijk en is ontwikkeld met gebruikmaking van de nieuwe functies van C++11/C++14. Het belangrijkste idee achter Video++ is om vanaf het begin een beeldverwerkingsframework opnieuw te ontwerpen dat gebruik maakt van de nieuwe C++-standaard.
Een geweldige eigenschap van de Video++-bibliotheek is de gemakkelijke definitie van parallelle beeldverwerkingskernels die tot 32 keer sneller werken dan de naïeve, niet-geoptimaliseerde versie. De bibliotheek heeft verschillende belangrijke functies opgenomen, zoals generieke N-dimensionale afbeeldingscontainers, een verbeterde set beeldverwerkingsalgoritmen, opvulkleur, beter geheugenbeheer, opvulrand, gebruik van 3D-subafbeeldingen en nog veel meer.
De bibliotheek heeft een handige functie verschaft voor toegang tot de afbeeldingscontainers die toegang bieden tot de pixelbuffer en tot een ander stuk informatie dat nuttig is om de afbeelding te verwerken. Het biedt ook interoperabiliteit met openCV en ondersteunt expliciete conversies van en naar OpenCV-afbeeldingstypen.
Aan de slag met Video++
Gebruik de volgende opdracht voor een volledige installatie. De Video++ is alleen header, dus om toegang te krijgen tot alle benodigde functies, moet u de vpp.h-header opnemen. U moet ook Eigen3 en Boost op uw systeem hebben voordat u Video++ installeert.
Installeer Video++ via het git-commando
git clone https://github.com/matt-42/vpp.git
cd vpp
./install.sh your_install_prefix # Install iod and vpp in a given prefix
Parallelle beeldverwerking via C++-bibliotheek
Met de open source Video++-bibliotheek kunnen softwareontwikkelaars kernels definiëren voor het verwerken van parallelle afbeeldingen met behulp van C++-opdrachten. Het mooie is dat de kernels 32 keer sneller kunnen werken dan normale. Het verspreidde de uitvoering van kernels gelijkelijk over alle beschikbare CPU-kernen met verschillende threads die op verschillende kernen draaien. Het ondersteunt functies zoals het vullen van randen met waarde, het vullen van de randspiegel, het instellen van de uitlijning, toegang tot afbeeldingspixels, het toepassen van filters op afbeeldingen, enzovoort.
Afbeelding toevoegen via C++
De open source Video++-bibliotheek biedt volledige functionaliteit voor het toevoegen van afbeeldingen met behulp van een pixelgewijs filter. Het biedt een reeks generieke objecten en routines waarmee snel efficiënte implementaties van eenvoudige filters kunnen worden geschreven. Veel beeldverwerkingsfilters zijn eenvoudige functies die pixels vullen met berekende waarden, waardoor er geen afhankelijkheden zijn tussen berekeningen met betrekking tot verschillende pixels.
Vertaling:
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]]);
}
}