Travail avec les images en C++ : bibliothèques CImg et STB Image

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Travail avec les images en C++ : bibliothèques CImg et STB Image

Le traitement d'images est l'une des tâches clés en infographie, en vision par ordinateur et dans les technologies web. En C++, il n'existe pas d'outils intégrés pour travailler avec les images matricielles, mais de nombreuses bibliothèques tierces existent. Dans cet article, nous examinerons deux bibliothèques populaires et faciles à utiliser : CImg (pour le traitement de haut niveau) et STB Image (pour le chargement/sauvegarde rapide des formats courants).



1. CImg : une bibliothèque universelle pour le traitement d'images

CImg (C++ Template Image Processing Library) est une bibliothèque header-only qui offre un large éventail de fonctions pour charger, afficher, filtrer et analyser des images. Elle prend en charge les formats BMP, JPEG, PNG, TIFF et autres (avec des bibliothèques supplémentaires comme libpng, libjpeg).



Installation et inclusion

Téléchargez la dernière version depuis le site officiel. Ensuite, incluez simplement le fichier d'en-tête :

#include "CImg.h"using namespace cimg_library;


Opérations de base avec CImg

Examinons le chargement, le redimensionnement et l'application d'un filtre gaussien :

#include "CImg.h"#include <iostream>

int main() { // Chargement de l'image (supporte BMP, JPG, PNG, etc.) CImg<unsigned char> img("input.jpg"); // Redimensionnement à 400x300 CImg<unsigned char> resized = img.resize(400, 300); // Application d'un flou gaussien (rayon 3) CImg<unsigned char> blurred = resized.get_blur(3.0f); // Sauvegarde du résultat blurred.save("output.jpg"); std::cout << "Image traitée !" << std::endl; return 0;}


Fonctionnalités supplémentaires de CImg

  • Filtres : flou, accentuation, filtre médian, opérations morphologiques.
  • Transformations de couleurs : conversion en niveaux de gris, HSV, Lab.
  • Histogramme : construction et égalisation.
  • Dessin : lignes, cercles, texte sur l'image.
  • Affichage : fenêtre intégrée pour la visualisation (nécessite X11 sous Linux ou WinAPI sous Windows).


2. STB Image : chargement et sauvegarde rapides

STB Image est un ensemble de bibliothèques header-only de Sean Barrett, conçues pour lire/écrire des images aux formats PNG, JPG, BMP, GIF et autres. Le principal avantage est le minimalisme et la rapidité. Aucune installation requise, il suffit d'inclure les fichiers stb_image.h et stb_image_write.h.



Inclusion

Téléchargez les fichiers depuis GitHub. Pour l'utilisation, définissez la macro STB_IMAGE_IMPLEMENTATION dans un seul fichier .cpp :

#define STB_IMAGE_IMPLEMENTATION#include "stb_image.h"

#define STB_IMAGE_WRITE_IMPLEMENTATION#include "stb_image_write.h"


Exemple : chargement PNG et sauvegarde en JPG

#include <iostream>

#define STB_IMAGE_IMPLEMENTATION#include "stb_image.h"#define STB_IMAGE_WRITE_IMPLEMENTATION#include "stb_image_write.h"

int main() { int width, height, channels; // Chargement de l'image (retourne un tableau de pixels au format RGB/RGBA) unsigned char* img = stbi_load("input.png", &width, &height, &channels, 3); if (!img) { std::cerr << "Erreur de chargement de l'image !" << std::endl; return -1; } // Sauvegarde en JPEG avec une qualité de 90 stbi_write_jpg("output.jpg", width, height, 3, img, 90); // Libération de la mémoire stbi_image_free(img); std::cout << "Conversion terminée !" << std::endl; return 0;

Recommendations