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; Aussi dans la bibliothèque
Configuration d'applications en C++ : bibliothèques et outils pour un paramétrage flexible
Swagger/OpenAPI pour C# (.NET) : Génération et documentation d'API