Travailler avec des images en C++ : aperçu des bibliothèques et exemples pratiques
Le traitement d'images numériques est l'une des tâches clés de la programmation moderne. En C++, il existe plusieurs bibliothèques puissantes permettant de charger, modifier, analyser et enregistrer des images. Dans cet article, nous examinerons trois outils les plus populaires : CImg (légère et simple), OpenCV (standard industriel pour la vision par ordinateur) et GraphicsMagick (pour la conversion haute performance).
1. CImg — une bibliothèque légère pour les opérations de base
CImg (The C++ Template Image Processing Library) est une bibliothèque d'en-tête qui ne nécessite pas l'installation de DLL supplémentaires. Elle est idéale pour les projets éducatifs et le prototypage rapide. Elle prend en charge les formats BMP, PNG, JPEG, TIFF (via des codecs externes).
Installation
Il suffit de télécharger le fichier CImg.h et de l'inclure dans votre projet. Pour travailler avec JPEG/PNG, libjpeg, libpng et zlib sont également nécessaires.
Exemple : chargement, inversion des couleurs et enregistrement
#include "CImg.h"using namespace cimg_library;
int main() { // Charger l'image CImg<unsigned char> img("input.jpg"); // Inverser les couleurs (pixel = 255 - pixel) CImg<unsigned char> inverted = 255 - img; // Appliquer un flou gaussien (rayon 3) CImg<unsigned char> blurred = img.get_blur(3); // Enregistrer les résultats inverted.save("inverted.jpg"); blurred.save("blurred.jpg"); return 0;}2. OpenCV — un framework puissant pour la vision par ordinateur
OpenCV (Open Source Computer Vision Library) est la norme de facto pour les tâches de reconnaissance, de détection d'objets et de traitement d'images complexe. Elle prend en charge des centaines d'algorithmes, le travail avec la vidéo et les réseaux de neurones. Elle est multiplateforme.
Installation
Sous Ubuntu : sudo apt install libopencv-dev. Sous Windows — via vcpkg ou l'installateur officiel.
Exemple : détection de contours (Canny) et redimensionnement
#include <opencv2/opencv.hpp>using namespace cv;
int main() { // Lecture de l'image Mat img = imread("photo.jpg"); if (img.empty()) return -1; // Conversion en niveaux de gris Mat gray; cvtColor(img, gray, COLOR_BGR2GRAY); // Détection de contours par l'algorithme Canny Mat edges; Canny(gray, edges, 50, 150); // Redimensionnement à 300x300 Mat resized; resize(img, resized, Size(300, 300)); // Enregistrement et affichage imwrite("edges.jpg", edges); imshow("Original", img); waitKey(0); return 0;}3. GraphicsMagick — conversion rapide et traitement par lots
GraphicsMagick est un fork d'ImageMagick, axé sur la stabilité et les performances. Il est utilisé pour la conversion de masse, le redimensionnement, les filigranes. Il fonctionne avec plus de 200 formats.
Installation
Via le gestionnaire de paquets : sudo apt install graphicsmagick. Pour C++, la bibliothèque libgraphicsmagick++-dev est requise.
Exemple : réduction d'image et conversion en PNG
#include <Magick++.h>using namespace Magick;
int main() { InitializeMagick(nullptr); // Chargement de l'image Image image("input.tiff"); // Mise à l'échelle à 800 pixels de largeur image.scale(Geometry("800x")); // Rotation de 90 degrés image.rotate(90); // Définition de la qualité JPEG (si le format de sortie est JPEG) image.quality(85); // Enregistrement en PNG image.write("output.png"); return 0;}Comparaison des bibliothèques
- CImg — démarrage simple, minimum
Aussi dans la bibliothèque
Mise en cache en Rust : Redis, Memcached et solutions intégrées
SDK Firebase Android pour Kotlin : guide complet avec exemples
unbuild pour TypeScript : guide complet avec exemples
Validation des données en Kotlin : bibliothèques, approches et exemples de code