Linux + Mac | Windows | Code quality |
---|---|---|
PenguinV is a simple and easy to use C++ image processing library with focus on heterogeneous systems. It is designed to have simple programming syntax and to deliver good performance. Some core features of the library are:
- heterogeneous system support (CPU/GPU)
- compactness
- optional GPU (CUDA, OpenCL) and SIMD (SSE, AVX, NEON) support
- cross-platform
- functions can perform processing on separate part (region of interest) of images
- multithreading support for individual functions (please refer to multithreading support section)
- user-defined image types support (you can create your own image types and image functions [See API description, ImageTemplate class])
At the current stage of development library does not have some features but we are intending to introduce them very soon:
- better support of CUDA, OpenCL, SSE, AVX, NEON
- better heterogeneous system architecture
The library does NOT have it's own image displaying code but you can refer to QT example.
Please read contribution page before starting work on a pull request. All contributors are listed in the project's wiki page.
To compile the source code your compiler must support at least C++ 11 version.
The library is distributed in the form of source code. To use the library you need to include library files into your application project. That's it! No more extra moves!
Open README.md file in any of example directories and follow instructions.
Every non empty image can be divided into multiple parts or areas (in scientific terms ROI - region of interest). To run image processing in multiple threads you need only to split bigger ROI into small parts and call necessary basic functions. No extra magic! Make sure that small parts are not intersecting by each other.
Almost all basic functions support multithreading. Please refer to Function_Pool namespace and function_pool example.
All source code related to CUDA or OpenCL is located in separate directory named as cuda and opencl respectively. Read full description about CUDA or OpenCL support in README file in the directory.
This project is under 3-clause BSD License. Please refer to file LICENSE for more details.
Please refer to file API_description.md in doc directory for full description of API.