1. Products
  2.   Image
  3.   C++
  4.   Video++
 
  

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.

What is Video++?

Video++ stands as a powerful, multi-threaded and cross-platform C++ image editing API, expertly designed to empower software developers to integrate robust image and video files processing directly into their own C++ applications. Built from the ground up, its core philosophy was to redesign from scratch an image processing framework that fully leverages the modern capabilities of C++11/C++14, resulting in a library that is both very easy to handle and exceptionally efficient. This foundational redesign prioritizes performance and developer ergonomics, establishing Video++ as a modern solution for complex media tasks.

A standout feature of the Video++ library is its streamlined creation of parallel image processing kernels, which can deliver execution speeds up to 32 times faster than unoptimized, naïve implementations. It is equipped with a comprehensive suite of tools, including generic N-dimensional image containers, an enhanced set of image processing algorithms, and advanced functions for fill color, fill border, and better memory management. The library also provides seamless interoperability with OpenCV, supporting explicit conversions to and from OpenCV image types. Furthermore, it offers direct access to the pixel buffer and other critical metadata, giving developers fine-grained control, while supporting advanced operations like the use of 3D sub-images for sophisticated processing workflows.

Previous Next

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.

How to Add 2D Images 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]]);
  }
}
 English