ICL is a C++ computer vision framework developed at the Neuroinformatics Group, University of Bielefeld. It provides a large set of classes and functions for image processing, computer vision, 3D geometry, GUI creation, and physics simulation — all designed to work together seamlessly.
- Optimal Performance — optional Intel IPP acceleration, SIMD, OpenMP, and OpenCL support. Images use planar channel storage with zero-copy shallow wrapping of existing data.
- Simple C++ Interface — readable, low-boilerplate code. A complete image acquisition and visualization application fits in ~15 lines of C++. PIMPL pattern hides complexity.
- Self-Contained Framework — write applications in ICL rather than gluing libraries together. Includes GUI creation, program argument parsing, multi-threaded application lifecycle, and build tools.
- No Compulsory Dependencies — all external dependencies are optional. Build a slim ICL for algorithm development, then link against a full build for deployment.
Required tools:
- CMake 3.16+
- C++17 compiler (GCC 7+, Clang 5+, MSVC 2017+)
Required libraries:
libjpeg(orlibjpeg-turbo)libpng
git clone https://github.com/iclcv/icl.git
mkdir icl/build && cd icl/build
cmake ..
make -j$(nproc)cmake .. \
-DBUILD_WITH_QT=ON \
-DBUILD_WITH_OPENCV=ON \
-DBUILD_WITH_EIGEN3=ON \
-DBUILD_WITH_IMAGEMAGICK=ON \
-DBUILD_WITH_LIBAV=ON \
-DBUILD_WITH_OPENCL=ON \
-DBUILD_APPS=ON \
-DBUILD_DEMOS=ON \
-DBUILD_EXAMPLES=ON
make -j$(nproc)All dependencies except libjpeg and libpng are optional. Enable them with -DBUILD_WITH_<NAME>=ON.
| Feature | CMake Flag | Description | Install (apt) | Install (brew) |
|---|---|---|---|---|
| Qt6 | BUILD_WITH_QT |
GUI framework, visualization, image display | qt6-base-dev qt6-multimedia-dev libqt6opengl6-dev libglew-dev |
qt glew |
| OpenCV | BUILD_WITH_OPENCV |
Image type conversion, ORB features | libopencv-dev |
opencv |
| Eigen3 | BUILD_WITH_EIGEN3 |
Faster matrix operations | libeigen3-dev |
eigen |
| OpenCL | BUILD_WITH_OPENCL |
GPU-accelerated processing | ocl-icd-opencl-dev opencl-headers |
(built-in on macOS) |
| ImageMagick | BUILD_WITH_IMAGEMAGICK |
Extended image format I/O | libmagick++-dev |
imagemagick |
| FFmpeg | BUILD_WITH_LIBAV |
Video file I/O | libavcodec-dev libavformat-dev libswscale-dev |
ffmpeg |
| Feature | CMake Flag | Description | Install (apt) | Install (brew) |
|---|---|---|---|---|
| V4L2 | BUILD_WITH_V4L |
USB cameras/webcams (Linux) | (usually in kernel headers) | n/a |
| libdc1394 | BUILD_WITH_LIBDC |
FireWire cameras | libdc1394-dev |
libdc1394 |
| libfreenect | BUILD_WITH_LIBFREENECT |
Kinect v1 | libfreenect-dev |
libfreenect |
| libfreenect2 | BUILD_WITH_LIBFREENECT2 |
Kinect v2 | build from source | build from source |
| Pylon | BUILD_WITH_PYLON |
Basler GigE cameras | Basler SDK | Basler SDK |
| Feature | CMake Flag | Description | Install (apt) | Install (brew) |
|---|---|---|---|---|
| PCL | BUILD_WITH_PCL |
Point Cloud Library compatibility | libpcl-dev |
pcl |
| Bullet3 | BUILD_WITH_BULLET |
Physics simulation (ICLPhysics) | libbullet-dev |
bullet |
| ZeroMQ | BUILD_WITH_ZMQ |
Network image streaming | libzmq3-dev |
zeromq |
| libusb | BUILD_WITH_LIBUSB |
USB device support | libusb-dev |
libusb |
| Intel IPP | BUILD_WITH_IPP |
Intel Performance Primitives (Linux x86 only) | Intel oneAPI | n/a |
| Intel MKL | BUILD_WITH_MKL |
Intel Math Kernel Library (Linux x86 only) | Intel oneAPI | n/a |
| Flag | Default | Description |
|---|---|---|
BUILD_APPS |
OFF | Build end-user applications (installed as icl-*) |
BUILD_DEMOS |
OFF | Build demo programs |
BUILD_EXAMPLES |
OFF | Build documentation examples |
BUILD_TESTS |
OFF | Build test suite (downloads Google Test) |
cmake .. -DBUILD_TESTS=ON
make tests # build test executables
ctest # run all tests
# or run individually:
./ICLMath/tests_iclmathPlease open an issue on GitHub.
