Traitement d'images en C++ : redimensionnement et recadrage avec la bibliothèque OpenCV

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 : redimensionnement et recadrage en C++ avec OpenCV

\n\n

Dans le développement d'applications modernes, en particulier dans les domaines de la vision par ordinateur, du web scraping ou du traitement de fichiers multimédias, il est souvent nécessaire de redimensionner (resize) et de recadrer (crop) des images par programmation. Le langage C++, combiné à la puissante bibliothèque OpenCV, fournit tous les outils nécessaires pour cela. Dans cet article, nous allons détailler comment effectuer ces opérations, quels paramètres influencent la qualité du résultat, et présenter des exemples de code prêts à l'emploi.

\n\n

La bibliothèque OpenCV — le standard de facto pour le traitement d'images en C++

\n\n

OpenCV (Open Source Computer Vision Library) est une bibliothèque multiplateforme open source contenant des centaines d'algorithmes optimisés pour le traitement d'images et de vidéos. Elle est écrite en C++ et dispose de liaisons pour Python, Java et d'autres langages. Pour le C++, OpenCV est la solution la plus performante et la plus fonctionnelle.

\n\n

Les principaux avantages d'OpenCV pour les tâches de redimensionnement et de recadrage :

\n
    \n
  • Haute vitesse — toutes les fonctions utilisent des instructions SIMD et le multithreading.
  • \n
  • Flexibilité — prise en charge de diverses méthodes d'interpolation (bilinéaire, bicubique, méthode de Lanczos, etc.).
  • \n
  • Commodité — travail avec les images via la classe cv::Mat, qui gère automatiquement la mémoire.
  • \n
\n\n

Installation d'OpenCV pour C++

\n

Pour commencer, il est nécessaire d'installer la bibliothèque. La méthode la plus courante est via le gestionnaire de paquets vcpkg ou la compilation à partir des sources. Exemple d'installation via vcpkg :

\n
git clone https://github.com/Microsoft/vcpkg.git\ncd vcpkg\n./bootstrap-vcpkg.sh\n./vcpkg install opencv4
\n\n

Après l'installation, connectez la bibliothèque dans votre CMakeLists.txt :

\n
find_package(OpenCV REQUIRED)\ntarget_link_libraries(your_project ${OpenCV_LIBS})
\n\n

Redimensionnement d'image (resize)

\n

La fonction cv::resize() permet de modifier les dimensions de l'image source à une largeur et une hauteur données. Syntaxe :

\n
cv::resize(\n    InputArray src,      // image source\n    OutputArray dst,     // image résultante\n    Size dsize,          // nouvelle taille (largeur, hauteur)\n    double fx = 0,       // échelle en X (si dsize n'est pas défini)\n    double fy = 0,       // échelle en Y\n    int interpolation = INTER_LINEAR  // méthode d'interpolation\n);
\n\n

Le paramètre interpolation détermine l'algorithme utilisé pour calculer les nouveaux pixels. Les principales options :

\n
    \n
  • INTER_NEAREST — méthode du plus proche voisin (rapide, mais de faible qualité).
  • \n
  • INTER_LINEAR — interpolation bilinéaire (bon équilibre entre vitesse et qualité).
  • \n
  • INTER_CUBIC — interpolation bicubique (plus qualitative, mais plus lente).
  • \n
  • INTER_LANCZOS4 — interpolation de Lanczos (meilleure qualité pour l'agrandissement).
  • \n
\n\n

Exemple d'agrandissement d'une image de 2 fois avec interpolation bicubique :

\n
#include <opencv2/opencv.hpp>\n#include <iostream>\n\nint main() {\n    cv::Mat src = cv::imread("input.jpg");\n    if (src.empty()) {\n        std::cerr << "Impossible de charger l'image" << std::endl;\n        return -1;\n    }\n\n    cv::Mat dst;\n    cv::resize(src, dst, cv::Size(), 2.0, 2.0, cv::INTER_CUBIC);\n\n    cv::imwrite("output_resized.jpg", dst);\n    std::cout << "Image agrandie et sauvegardée" << std::endl;\n    return 0;\n}
\n\n

Recadrage d'image (crop)

\n

Dans OpenCV, il n'existe pas de fonction dédiée au recadrage. On utilise plutôt le mécanisme de Region of Interest (ROI) — la sélection d'une zone rectangulaire dans l'image. Cela se fait à l'aide de l'opérateur () ou de la méthode cv::Mat::operator().

\n\n

Syntaxe du recadr

Recommendations