An awesome & curated list of cpp libraries for CV/CGers.
single-file public domain (or MIT licensed) libraries for C/C++
Abseil is an open-source collection of C++ code (compliant to C++11) designed to augment the C++ standard library.
Lightweight C++ command line option parser.
spdlog is a very fast, header-only/compiled, C++ logging library.
plog is a portable, simple and extensible C++ logging library, pretty powerful logging library in about 1000 lines of code.
loguru is a lightweight and flexible C++ logging library.
easy_profiler is lightweight cross-platform profiler library for C++.
Microprofile is a embeddable profiler in a few files, written in C++
Remotery is a realtime CPU/GPU profiler hosted in a single C file with a viewer that runs in a web browser.
{fmt} is an open-source formatting library for C++. It can be used as a safe and fast alternative to (s)printf and iostreams.
tinyformat.h is a type safe printf replacement library in a single C++ header file.
A modern, C++-native, header-only, test framework for unit-tests, TDD and BDD - using C++11, C++14, C++17 and later (or C++03 on the Catch1.x branch)
cereal is a header-only C++11 serialization library. cereal takes arbitrary data types and reversibly turns them into different representations, such as compact binary encodings, XML, or JSON. cereal was designed to be fast, light-weight, and easy to extend - it has no external dependencies and can be easily bundled with other code or used standalone.
JSON for Modern C++
JsonCpp is a C++ library that allows manipulating JSON values, including serialization and deserialization to and from strings.
A fast JSON parser/generator for C++ with both SAX/DOM style API
Dear ImGui is a bloat-free graphical user interface library for C++. It outputs optimized vertex buffers that you can render anytime in your 3D-pipeline enabled application. It is fast, portable, renderer agnostic and self-contained (no external dependencies).
NanoGUI is a minimalistic cross-platform widget library for OpenGL 3.x or higher. It supports automatic layout generation, stateful C++11 lambdas callbacks, a variety of useful widget types and Retina-capable rendering on Apple devices thanks to NanoVG by Mikko Mononen. Python bindings of all functionality are provided using pybind11.
Matplot++: A C++ Graphics Library for Data Visualization.
ImPlot is an immediate mode, GPU accelerated plotting library for Dear ImGui.
A C++ GPU Computing Library for OpenCL
VexCL is a C++ vector expression template library for OpenCL/CUDA/OpenMP
Magic Enum C++ is a header-only C++17 library provides static reflection for enums, work with any enum type without any macro or boilerplate code.
Eigen is a C++ template library for linear algebra: matrices, vectors, numerical solvers, and related algorithms.
linalg.h
is a single header, public domain, short vector math library for C++.
NumCpp is a C++ implementation of the Python Numpy library.
Ceres Solver is an open source C++ library for modeling and solving large, complicated optimization problems. Ceres Solver can solve two kinds of problems.
Ipopt (Interior Point OPTimizer) is a software package for large-scale nonlinear optimization.
NLopt is a library for nonlinear local and global optimization, for functions with and without gradient information. It is designed as a simple, unified interface and packaging of several free/open-source nonlinear optimization libraries.
AMGCL is a header-only C++ library for solving large sparse linear systems with algebraic multigrid (AMG) method.
OptimLib is a lightweight C++ library of numerical optimization methods for nonlinear functions.
autodiff is a C++17 library that uses modern and advanced programming techniques to enable automatic computation of derivatives in an efficient, easy, and intuitive way.
FastAD is a header-only C++ template library for automatic differentiation supporting both forward and reverse mode.
Clad is a source-transformation automatic differentiation (AD) library for C++, implemented as a plugin for the Clang compiler.
Adept-2 is combined array and automatic differentiation library in C++.
StatsLib is a templated C++ library of statistical distribution functions, featuring unique compile-time computing capabilities and seamless integration with several popular linear algebra libraries.
Open Source Computer Vision Library.
C-based/Cached/Core Computer Vision Library, A Modern Computer Vision Library.
CImg Library is a small and open-source C++ toolkit for image processing.
The VLFeat open source library implements popular computer vision algorithms specialising in image understanding and local featurexs extraction and matching.
Theia is an open source library for multiview geometry and structure from motion. It is designed to be very efficient, scalable, and accurate. All steps of the pipeline are designed to be modular so that code is easy to read and easy to extend.
COLMAP is a general-purpose Structure-from-Motion (SfM) and Multi-View Stereo (MVS) pipeline with a graphical and command-line interface. It offers a wide range of features for reconstruction of ordered and unordered image collections. The software is licensed under the new BSD license.
Bundler Structure from Motion Toolkit
OpenMVG (Multiple View Geometry) is a library for computer-vision scientists and especially targeted to the Multiple View Geometry community. It is designed to provide an easy access to the classical problem solvers in Multiple View Geometry and solve them accurately.
OpenMVS (Multi-View Stereo) is a library for computer-vision scientists and especially targeted to the Multi-View Stereo reconstruction community. The input is a set of camera poses plus the sparse point-cloud and the output is a textured mesh.
AliceVision is a Photogrammetric Computer Vision Framework which provides a 3D Reconstruction and Camera Tracking algorithms.
A simple C++ geometry processing library.
MeshLab is an open source, portable, and extensible system for the processing and editing of unstructured large 3D triangular meshes.
The Computational Geometry Algorithms Library (CGAL), a C++ library that aims to provide easy access to efficient and reliable algorithms in computational geometry.
Geogram is a programming library with geometric algorithms. And Graphite is an experimental 3D modeler built around geogram.
A modern library for 3D data processing.
The Visualization and Computer Graphics Library (VCGlib for short), a open source, portable, C++, templated, no dependency, library for manipulation, processing, cleaning, simplifying triangle meshes. And it is the base of Meshlab.
A flexible geometry modeling and processing framework.
Geometry-central is a modern C++ library of data structures and algorithms for geometry processing, with a particular focus on surface meshes.
The Polygon Mesh Processing Library is a modern C++ open-source library for processing and visualizing polygon surface meshes.
A generic programming header only C++ library for processing polygonal and polyhedral meshes.
Easy3D is an open-source library for 3D modeling, geometry processing, and rendering. It is implemented in C++ and designed with an emphasis on simplicity and efficiency.
A lightweight, modular, and cross-platform (Windows, OSX, Linux) 3D geometry processing environment.
The Point Cloud Library (PCL) is a standalone, large scale, open project for 2D/3D image and point cloud processing.
cilantro is a lean and fast C++ library for working with point cloud data.
Draco is a library for compressing and decompressing 3D geometric meshes and point clouds. It is intended to improve the storage and transmission of 3D graphics.
CloudCompare is a 3D point cloud (and triangular mesh) processing software. It was originally designed to perform comparison between two 3D points clouds (such as the ones obtained with a laser scanner) or between a point cloud and a triangular mesh. It relies on an octree structure that is highly optimized for this particular use-case. It was also meant to deal with huge point clouds (typically more than 10 million points, and up to 120 million with 2 GB of memory).
polyscope is a C++/Python viewer and user interface for 3D data, like meshes and point clouds.
A two-dimensional quality mesh generator and delaunay triangulator.
CDT is a C++ library for generating constraint or conforming Delaunay triangulations.
MVS-Texturing is a project that focuses on texturing 3D reconstructions from multi-view stereo images.
xatlas is a small C++11 library with no external dependencies that generates unique texture coordinates suitable for baking lightmaps or texture painting.
UVAtlas is a shared source library for creating and packing an isochart texture atlas.
Ptex is a texture mapping system developed by Walt Disney Animation Studios for production-quality rendering.
manif is a header-only C++11 Lie theory library for state-estimation targeted at robotics applications.
Sophus is a c++ implementation of Lie groups commonly used for 2d and 3d geometric problems (i.e. for Computer Vision or Robotics applications). Among others, this package includes the special orthogonal groups SO(2) and SO(3) to present rotations in 2d and 3d as well as the special Euclidean group SE(2) and SE(3) to represent rigid body transformations (i.e. rotations and translations) in 2d and 3d. It is released under a MIT license.
libpointmatcher is a modular library implementing the Iterative Closest Point (ICP) algorithm for aligning point clouds. It has applications in robotics and computer vision. \nIt is released under a permissive BSD license.
OpenGR is a set C++ libraries for 3D Global Registration. And it aims at providing several state of the art global registration algorithms for 3D data.
FastGlobalRegistration is an open source C++ implementation based on the technique presented in the paper "Fast Global Registration, ECCV 2016."
Super fast implementation of ICP in CUDA for compute capable devices 3.5 or higher. Requires CUDA, includes Pangolin, Eigen and Sophus third party submodules
ANN is a library written in C++, which supports data structures and algorithms for both exact and approximate nearest neighbor searching in arbitrarily high dimensions.
A C++11 header-only library for Nearest Neighbor (NN) search with KD-trees.
FCL is a library for performing three types of proximity queries on a pair of geometric models composed of triangles.
bgfx is a cross-platform, graphics API agnostic, "Bring Your Own Engine/Framework" style rendering library.
A tiny yet powerful rendering library.
Yocto/GL is a collection of small C++17 libraries for building physically-based graphics algorithms released under the MIT license.
Filament is a real-time physically based rendering engine for Android, iOS, Linux, macOS, Windows, and WebGL. It is designed to be as small as possible and as efficient as possible on Android.
ozz-animation is an open source c++ 3d skeletal animation library. It provides runtime character animation functionalities (sampling, blending...), with the toolset to import major DCC formats (Collada, Fbx, glTF...). It proposes a low-level renderer and game-engine agnostic implementation, focusing on performance and memory constraints with a data-oriented design.
Bullet Physics SDK: real-time collision detection and multi-physics simulation for VR, games, visual effects, robotics, machine learning etc.
Pinocchio is a fast and flexible implementation of Rigid Body Dynamics algorithms and their analytical derivatives.
OpenSCAD is a software for creating solid 3D CAD objects.
Dust3D is a cross-platform open-source 3D modeling software. Auto UV unwrapping, auto rigging with PBR Material support, pose and motion authoring all in one.
C++ implementation of the 3D QuickHull algorithm.
Qhull is a general dimension convex hull program. It also generates Delaunay triangulations, Voronoi diagrams, furthest-site Voronoi diagrams, and halfspace intersections about a point.
Cork is designed to support Boolean operations between triangle meshes.