Open Source C++ Library for Parallel Image Processing
Free C++ API that supports generic N-dimensional image containers, enhanced set of image processing algorithms, and so on.
Video++ is a powerful multi-threaded and cross-platform C++ image editing API that enables software developers to work with images and video files inside their own C++ applications. The library is very easy to handle and is developed taking advantage of the new features of C++11/C++14. The main idea behind Video++ is to redesign from scratch an image processing framework taking advantage of the new C++ standard.
One great feature of the Video++ library is the easy definition of parallel image processing kernels which run up to 32 times faster than the naïve non-optimized version. The library has included several important features such as generic N-dimensional image containers, an enhanced set of image processing algorithms, fill color, better memory management, fill border, use of 3D sub-images, and many more.
The library has provided a useful feature for accessing the image containers which offer access to the pixel buffer and to another piece of information useful to process the image. It also provides interoperability to openCV and supports explicit conversions to and from OpenCV image types.
Getting Started with Video++
Please use the following command for a complete installation. The Video++ is header-only so to access all the necessary features, you must include vpp.h header. You also require to get Eigen3 and Boost on your system before install Video++.
Install Video++ via git command
git clone https://github.com/matt-42/vpp.git
cd vpp
./install.sh your_install_prefix # Install iod and vpp in a given prefix
Parallel Image Processing via C++ Library
The open source Video++ library allows software developers to define kernels for processing parallel images using C++ commands. The great thing is that the kernels can run 32 times faster than normal ones. It equally spread the execution of kernels over all available CPU cores running several threads running on several cores. It supports features like filling borders with value, filling border mirror, setting the alignment, accessing image pixels, applying filters on images, and so on.
Image Addition via C++
The open source Video++ library has provided complete functionality for adding images using pixel-wise filter. It offers a set of generic objects and routines that allow writing efficient implementations of simple filters quickly. Many image processing filters are simple functions that fill pixels with computed values, thus featuring no dependencies between computations regarding different pixels.
Add 2D Image via 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]]);
}
}