Nyílt forráskódú C++ könyvtár párhuzamos képfeldolgozáshoz
Ingyenes C++ API, amely támogatja az általános N-dimenziós képtárolókat, továbbfejlesztett képfeldolgozó algoritmusokat és így tovább.
A Video++ egy nagy teljesítményű többszálas és többplatformos C++ képszerkesztő API, amely lehetővé teszi a szoftverfejlesztők számára, hogy képekkel és videofájlokkal dolgozzanak saját C++ alkalmazásaikon belül. A könyvtár nagyon könnyen kezelhető, és a C++11/C++14 új funkcióit kihasználva lett kifejlesztve. A Video++ mögött meghúzódó fő ötlet egy képfeldolgozó keretrendszer újratervezése a semmiből, kihasználva az új C++ szabvány előnyeit.
A Video++ könyvtár egyik nagyszerű tulajdonsága a párhuzamos képfeldolgozó kernelek egyszerű meghatározása, amelyek akár 32-szer gyorsabban futnak, mint a naiv, nem optimalizált verzió. A könyvtár számos fontos funkciót tartalmaz, például általános N-dimenziós képtárolókat, továbbfejlesztett képfeldolgozó algoritmusokat, kitöltőszínt, jobb memóriakezelést, kitöltési határt, 3D-s alképek használatát és még sok mást.
A könyvtár hasznos funkciót biztosít a képtárolók eléréséhez, amelyek hozzáférést biztosítanak a pixelpufferhez és egy másik, a kép feldolgozásához hasznos információhoz. Együttműködést biztosít az openCV-vel, és támogatja az OpenCV képtípusokba való explicit konvertálást.
A Video++ használatának első lépései
Kérjük, használja a következő parancsot a teljes telepítéshez. A Video++ csak fejléceket tartalmaz, így az összes szükséges funkció eléréséhez a vpp.h fejlécet kell tartalmaznia. A Video++ telepítése előtt telepítenie kell az Eigen3-at és a Boost-ot is a rendszerére.
Telepítse a Video++-t a git paranccsal
git clone https://github.com/matt-42/vpp.git
cd vpp
./install.sh your_install_prefix # Install iod and vpp in a given prefix
Párhuzamos képfeldolgozás C++ könyvtáron keresztül
A nyílt forráskódú Video++ könyvtár lehetővé teszi a szoftverfejlesztők számára, hogy kerneleket definiáljanak párhuzamos képek feldolgozásához C++ parancsok segítségével. A nagyszerű dolog az, hogy a kernelek 32-szer gyorsabban tudnak futni, mint a normálok. A kernelek végrehajtását egyformán szétosztotta az összes elérhető CPU-magon, amelyek több szálon futnak több magon. Támogatja az olyan funkciókat, mint a szegélyek kitöltése értékkel, a kerettükör kitöltése, az igazítás beállítása, a képpontok elérése, a szűrők alkalmazása a képekre stb.
Kép hozzáadása C++-on keresztül
A nyílt forráskódú Video++ könyvtár teljes funkcionalitást biztosít a képek pixelenkénti szűrővel történő hozzáadásához. Általános objektumok és rutinok készletét kínálja, amelyek lehetővé teszik az egyszerű szűrők hatékony megvalósításának gyors megírását. Sok képfeldolgozó szűrő egyszerű függvény, amely kitölti a képpontokat számított értékekkel, így nincs függőség a különböző képpontokra vonatkozó számítások között.
2D kép 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]]);
}
}