C++ библиотека с отворен код за паралелна обработка на изображения
Безплатен C++ API, който поддържа генерични N-измерни контейнери за изображения, подобрен набор от алгоритми за обработка на изображения и т.н.
Video++ е мощен многопоточен и междуплатформен C++ API за редактиране на изображения, който позволява на разработчиците на софтуер да работят с изображения и видео файлове в техните собствени C++ приложения. Библиотеката е много лесна за работа и е разработена, като се възползват от новите функции на C++11/C++14. Основната идея зад Video++ е да се преработи от нулата рамка за обработка на изображения, като се възползва от новия стандарт C++.
Една страхотна характеристика на библиотеката Video++ е лесното дефиниране на ядра за паралелна обработка на изображения, които работят до 32 пъти по-бързо от наивната неоптимизирана версия. Библиотеката включва няколко важни функции, като общи контейнери за N-измерни изображения, подобрен набор от алгоритми за обработка на изображения, цвят на запълване, по-добро управление на паметта, граница на запълване, използване на 3D подизображения и много други.
Библиотеката предоставя полезна функция за достъп до контейнерите с изображения, които предлагат достъп до пикселния буфер и до друга информация, полезна за обработка на изображението. Той също така осигурява оперативна съвместимост с openCV и поддържа изрични преобразувания към и от OpenCV типове изображения.
Първи стъпки с Video++
Моля, използвайте следната команда за пълна инсталация. Video++ е само заглавка, така че за достъп до всички необходими функции трябва да включите заглавка vpp.h. Също така трябва да получите Eigen3 и Boost на вашата система, преди да инсталирате Video++.
Инсталирайте Video++ чрез 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
Паралелна обработка на изображения чрез C++ библиотека
Библиотеката Video++ с отворен код позволява на разработчиците на софтуер да дефинират ядра за обработка на паралелни изображения с помощта на C++ команди. Страхотното е, че ядрата могат да работят 32 пъти по-бързо от нормалните. Той равномерно разпределя изпълнението на ядрата върху всички налични процесорни ядра, изпълняващи няколко нишки, работещи на няколко ядра. Той поддържа функции като запълване на граници със стойност, запълване на огледало на границата, задаване на подравняване, достъп до пиксели на изображението, прилагане на филтри върху изображения и т.н.
Добавяне на изображение чрез C++
Библиотеката Video++ с отворен код предоставя пълна функционалност за добавяне на изображения с помощта на пикселен филтър. Той предлага набор от общи обекти и процедури, които позволяват бързо писане на ефективни реализации на прости филтри. Много филтри за обработка на изображения са прости функции, които запълват пиксели с изчислени стойности, като по този начин не включват зависимости между изчисленията по отношение на различни пиксели.
Добавяне на 2D изображение чрез 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]]);
}
}