Traitement d'images en C++ : bibliothèques CImg, OpenCV 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

Travailler avec des images en C++ : revue des bibliothèques et exemples pratiques



Le traitement d'images est l'une des tâches clés de la programmation moderne, de la vision par ordinateur aux éditeurs graphiques. En C++, il existe plusieurs bibliothèques puissantes qui permettent de charger, traiter et sauvegarder des images. Dans cet article, nous examinerons trois outils populaires : CImg, OpenCV et stb_image. Chacune a ses propres caractéristiques, avantages et domaines d'application.



1. Bibliothèque CImg



CImg (C++ Image Processing Library) est une bibliothèque légère et multiplateforme pour le traitement d'images. Elle est distribuée sous la forme d'un seul fichier d'en-tête (CImg.h), ce qui la rend idéale pour le prototypage rapide et les petits projets. CImg prend en charge les formats BMP, JPEG, PNG, TIFF et autres, mais nécessite l'installation de bibliothèques supplémentaires (par exemple, libpng ou libjpeg) pour fonctionner avec eux.



Principales fonctionnalités :

  • Chargement, affichage et sauvegarde d'images.
  • Filtres (flou, netteté, filtre médian).
  • Transformations géométriques (rotation, mise à l'échelle, retournement).
  • Travail avec les espaces colorimétriques (RGB, HSV, Lab).
  • Dessin de primitives (lignes, cercles, texte).


Exemple : chargement d'une image et application d'un flou



#include "CImg.h"using namespace cimg_library;

int main() { // Chargeons l'image CImg<unsigned char> image("input.jpg");

// Appliquons un flou gaussien (rayon 3) CImg<unsigned char> blurred = image.get_blur(3);

// Sauvegardons le résultat blurred.save("output_blurred.jpg");

return 0;}


Ce code illustre l'approche minimaliste de CImg : une ligne pour le chargement, une pour le traitement et une pour la sauvegarde. La bibliothèque gère automatiquement la mémoire.



2. Bibliothèque OpenCV



OpenCV (Open Source Computer Vision Library) est la norme de facto pour les tâches de vision par ordinateur et de traitement d'images en C++. Elle comprend plus de 2500 algorithmes optimisés, prend en charge l'accélération GPU et est activement utilisée dans les solutions industrielles, la robotique et la recherche scientifique. OpenCV fonctionne avec les formats JPEG, PNG, TIFF, WebP et bien d'autres.



Principales fonctionnalités :

  • Chargement, affichage et enregistrement de vidéos/images.
  • Filtrage, morphologie, traitement par seuil.
  • Détection d'objets (visages, voitures) à l'aide de cascades Haar ou d'apprentissage profond.
  • Calibrage de caméra, vision stéréoscopique.
  • Apprentissage automatique (SVM, KNN, réseaux de neurones).


Exemple : redimensionnement et conversion en niveaux de gris



#include <opencv2/opencv.hpp>using namespace cv;

int main() { // Chargeons une image couleur Mat image = imread("input.jpg", IMREAD_COLOR); if (image.empty()) { return -1; }

// Convertissons en niveaux de gris Mat gray; cvtColor(image, gray, COLOR_BGR2GRAY);

// Réduisons la taille de moitié Mat resized; resize(gray, resized, Size(), 0.5, 0.5, INTER_LINEAR);

// Sauvegardons le résultat imwrite("output_gray_resized.jpg", resized);

return 0;}


OpenCV utilise la classe Mat pour représenter les images. Toutes les opérations sont effectuées via des fonctions statiques ou des méthodes. La bibliothèque nécessite une installation préalable, mais offre une flexibilité et des performances maximales.



3. Bibliothèque stb_image



stb_image fait partie d'un ensemble de bibliothèques à en-tête unique de Sean Barrett. Elle est conçue exclusivement pour le chargement et la sauvegarde d'images, sans fonctions de traitement. Elle prend en charge les formats JPEG, PNG, BMP, GIF, PS

Recommendations