The CImg Library is a small, open-source, and modern C++ toolkit for image processing, designed with these properties in mind :
CImg defines classes and methods to manage images in your own C++ code. You can use CImg to load/save various file formats, access pixel values, display/transform/filter images, draw primitives (text, faces, curves, 3d objects, ...), compute statistics, manage user interactions on images, and so on...
CImg defines a single image class able to represent datasets having up to 4-dimensions (from 1d scalar signals to 3d hyperspectral volumetric images), with template pixel types (bool,char,int,float,...).
It also handles image collections and sequences.
CImg is self-contained, thread-safe and highly portable. It fully works on different operating systems (Unix,Windows,MacOS X,*BSD,...) and is compatible with various C++ compilers (Visual C++,g++,clang++,icc,...).
CImg is lightweight. It is made of a single header file CImg.h that must be included in your C++ source. It defines only four different classes, encapsulated in the namespace cimg_library. It can be compiled using a minimal set of standard C++ and system libraries only.
No need for exotic or complex dependencies.
Although not mandatory, CImg can use functionalities of external tools/libraries such as Board, FFMPEG, FFTW3. GraphicsMagick, ImageMagick, Lapack, libcurl, libjpeg, libpng, libtiff, Magick++, OpenEXR OpenCV OpenMP or XMedCon. Moreover, a simple plug-in mechanism allows any user to directly enhance the library capabilities according to his needs.
CImg is a free, open-source library distributed under the CeCILL-C (close to the GNU LGPL) or CeCILL (compatible with the GNU GPL) licenses. It can be used in commercial applications.
CImg stands for Cool Image : It is easy to use, efficient and is intended to be a very pleasant toolbox to design image processing algorithms in C++. Due to its generic conception, it can cover a wide range of image processing applications.
(Check out his blog)
- David Tschumperlé (project leader)
with the help of many contributors around the world :
Maksim Aizenshtein, Alberto Albiol, Antonio Albiol, Simon Barthelmé, Neil Brown, Haz-Edine Assemlal, Vincent Barra, Wolf Blecher, Romain Blei, Yohan Bentolila, Jerome Boulanger, Pierre Buyssens, Sebastien Coudert, Frederic Devernay, Olivier D'Hondt, François-Xavier Dupé, Gerd von Egidy Eric Fausett, Jean-Marie Favreau, Sebastien Fourey, Alexandre Fournier, Vincent Garcia, David Grimbichler, Jinwei Gu, Jean-Daniel Guyot, Cédric Hammiche, Matt Hanson, Sebastien Hanel, Michael Holroyd, Christoph Hormann, Hon-Kwok Fung, Werner Jainek, Daniel Kondermann, Pierre Kornprobst, Jan W. Krieger, Orges Leka, Francois Lauze, Xie Long, Thomas Martin, Cesar Martinez, Jean Martinot, Arnold Meijster (Center for High Performance Computing and Visualization, University of Groningen/The Netherlands) Nikita Melnichenko, Baptiste Mougel, Julien Morat, Jovana Milutinovich, Guillaume Nee, Adam Newgas, Francisco Oliveira, Andrea Onofri, Renaud Peteri, Martin Petricek, Paolo Prete, Adrien Reboisson, Klaus Schneider, Jakob Schluttig, Veronique Souchaud, Konstantin Spirin, Rainer Steffens, David G. Starkweather, Grzegorz Szwoch, Thierry Thomas, Yu-En-Yun, Vo Duc Khanh, Phillip Wood, Bug Zhao, Haibo Zheng.
The CImg Library is an open-source product distributed under two distinct licenses : the library core itself is dual-licensed and can be governed either by the CeCILL-C License (LGPL-like), or the CeCILL License (GPL-compatible). Most of the other package files are distributed under the CeCILL License. Both are open-source licenses, the CeCILL-C being less restrictive than the CeCILL.
The CImg Library source code has been registered to the APP (French Agency for the Protection of Programs) by the INRIA, under registration number IDDN.FR.001.040004.000.S.P.2004.000.21000.
The development of the CImg Library began at the end of 1999, when I started my PhD thesis in the Lab at the Sophia Antipolis. It was designed to help me and my colleagues developing various image processing algorithms, for datasets as simple as 2D scalar images, or as complex as 3D volumes of diffusion tensors. I also used it for courses on image processing I teached at the university. As a result, the CImg Library has been always intended to be compact, easy to install and to use, multi-platform and generic. It provides a lot of basic functions that everyone would like to find in a good C++ image processing framework.
I am now a permanent researcher of the institution, working in the group at the GREYC lab in Caen/France. I am still using, maintaining and updating the CImg Library, and will probably do it for the next couple of years.
The CImg Library is an open-source C++ library which is mainly developped during free time. If you enjoy using CImg, you may contribute to the project in different ways. This will motivate me to continue the work.
- You can help CImg to be more widely known, by displaying a CImg Flyer at work, in your lab or school (available in .PDF or .JPEG formats).
- You can report bugs, propose patches or new functionalities, using the CImg forum.
- You can write tutorials or parts of the documentation.
- If you just want to say you've been happy with the library, you can send me a postcard from your place, to the following address :
David Tschumperlé, GREYC (UMR CNRS 6072), Equipe IMAGE, 6 Bd du Maréchal Juin, 14050 Caen Cedex, FRANCE.
63 postcards received yet (I still have empty space on my wall ! :) ), from :
- Comissao Nacional de Energia Nuclear, Rio de Janeiro, Brazil.
- Universidad Nacional del Litoral, Santa Fe, Argentina.
- Waikiki's only true resort, Honolulu/Hawaii.
- Royal Pavilion, Brighton/UK.
- Cambridge, UK.
- National Tai-Chung Institute of Technology, Taiwan.
- Fuzzy Logic Laboratorium Linz-Hagenberg, Linz, Austria.
- Microsoft Research, Beijing/China.
- Florida Atlantic University/USA.
- Ecole Nationale Supérieure des Mines de Saint-Etienne/France.
- Venice/Italy, from Sebastien/GREYC (Caen/France).
- Barcelone/Spain, from Jaime.
- Guadeloupe/France, from Jean-Michel.
- London/England, from Sebastien/GREYC (Caen/France).
- Valencia/Spain, from the Research Institute ITEAM of the Unversidad Politecnica.
- Vienna/Austria, from Sebastien/GREYC (Caen/France).
- Neuherberg/Germany, from the Institut for Biomathematick und Biometrie.
- Cabestany/France, from Guy Poizat.
- Frascati/Italy, from PhotoComiX.
- Jaca/Spain, from F. Albior.
- Munich/Germany, from M???? (didn't succeed in reading the name, sorry !).
- Playa del Carmen/Mexico, from Sebastien/GREYC (Caen/France).
- Holland, from Vincent/GREYC (Caen/France).
- Portland/Oregon/USA, from Mahvin.
- Gibraltar, from Terry Hendicott.
- Neuchatel/Switzerland, from Corinne Masimann.
- Foster City/California, from Arkadi Gelfond.
- Huntsville/Alabama, from Gordon M. Neeley.
- Biscarosse/France, from Sebastien/GREYC (Caen/France).
- California/USA, from Benoit Gauzere/GREYC (Caen/France).
- Puy-de-Dome/France, from Sebastien/GREYC (Caen/France).
- Portsmouth/United Kingdom, from Sebastien Clediere/Snell Ltd.
- Helsinki/Finland, from Arto Huotari.
- Mettlach/Germany, from Werner Meier.
- Boston/USA, from Dan Cullen.
- Mantova/Italy, from Mauro Mitrino.
- Seligenstadt/Germany, from Dr. Rainer Teubner.
- Hokusai/Japan, from Benoit Gauzere and Francois Lozes.
- Munchen/Germany, from Alexandru Dulin.
- Trier/Germany, from Family Hamacher.
- Ile de Batz/France, from Pierre-Yves.
- Germany, from Michel Thomas.
- Vienna/Austria, from Benoit Gauzere.
- Torquay/Australia, from Pauline van Buren.
- Lisboa/Portugal, from Patrick Wauters.
- Hazebrouck/France, from Michael T.
- USA, from Bill C.
- EDF/France, from ZondeR.
- Belgium, from Marc Lis.
- Roma/Italy, from Patrick Wauters.
- Germany, from Werner Meier.
- Germany, from Justin Pletzfeld.
- New York/USA, from Garry R. Osgood.
- Italy, from Andrea (coder of PhotoFlow).
- Sydney/Australia, from Peter Neave.
- Fort Worth/Texas/USA, from Steve Gillow.
- Pondicherry/India, from Bruno Steinbach.
- Pavia/Italy, from Giulio Canevari.
- Toulouse/France, from David Revoy.
- Konstanz/Germany, from Sébastien Fourey.