Travail avec les images : redimensionnement et recadrage en C++ avec OpenCV
\n\nDans 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\nLa bibliothèque OpenCV — le standard de facto pour le traitement d'images en C++
\n\nOpenCV (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\nLes 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
Installation d'OpenCV pour C++
\nPour 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 :
\ngit clone https://github.com/Microsoft/vcpkg.git\ncd vcpkg\n./bootstrap-vcpkg.sh\n./vcpkg install opencv4\n\nAprès l'installation, connectez la bibliothèque dans votre CMakeLists.txt :
\nfind_package(OpenCV REQUIRED)\ntarget_link_libraries(your_project ${OpenCV_LIBS})\n\nRedimensionnement d'image (resize)
\nLa fonction cv::resize() permet de modifier les dimensions de l'image source à une largeur et une hauteur données. Syntaxe :
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\nLe paramètre interpolation détermine l'algorithme utilisé pour calculer les nouveaux pixels. Les principales options :
- \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
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\nRecadrage d'image (crop)
\nDans 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().
Syntaxe du recadr
Aussi dans la bibliothèque
Winston pour JavaScript (Node.js) : guide complet avec exemples
Flysystem PHP : guide complet avec exemples
PHP-CS-Fixer PHP : guide complet avec exemples
Validation des données en Kotlin : bibliothèques et approches (Kotlin, Java)