Traitement d'images : redimensionnement et recadrage en C++ avec 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

Traitement d'images : redimensionnement et recadrage en C++

Dans l'infographie moderne et la vision par ordinateur, les opérations de redimensionnement (resize) et de recadrage (crop) d'images sont fondamentales. Que vous développiez une application de retouche photo, un système de reconnaissance faciale ou que vous souhaitiez simplement préparer des images pour un réseau de neurones, ces fonctions sont indispensables. Dans cet article, nous allons voir en détail comment effectuer le resize et le crop en langage C++ en utilisant la puissante bibliothèque OpenCV.



Pourquoi OpenCV ?

OpenCV (Open Source Computer Vision Library) est la norme de facto pour les tâches de vision par ordinateur. Elle est écrite en C/C++ et fournit des centaines d'algorithmes optimisés. Pour travailler avec le resize et le crop, nous n'avons besoin que de quelques fonctions, mais leurs performances et leur flexibilité font d'OpenCV un choix idéal.

Vous pouvez installer OpenCV via un gestionnaire de paquets (par exemple, vcpkg install opencv ou brew install opencv), ou en le compilant à partir des sources. Les détails d'installation sortent du cadre de cet article, mais nous supposons que vous avez déjà configuré un projet avec la bibliothèque incluse.



Préparation : chargement de l'image

Avant de modifier quoi que ce soit, il faut charger l'image. Dans OpenCV, cela se fait avec la fonction imread() :

#include <opencv2/opencv.hpp>#include <iostream>

using namespace cv;using namespace std;

int main() { // Chargement de l'image Mat image = imread("input.jpg"); if (image.empty()) { cerr << "Erreur de chargement de l'image !" << endl; return -1; } cout << "Taille de l'image originale : " << image.cols << " x " << image.rows << endl; return 0;}

La fonction retourne un objet de type Mat (matrice). Si le fichier est introuvable ou corrompu, image.empty() retournera true.



Redimensionnement d'image (resize) en C++

La fonction resize() dans OpenCV permet de redimensionner une image à des dimensions arbitraires. Elle prend en charge plusieurs méthodes d'interpolation qui influencent la qualité du résultat.



Syntaxe de resize

void resize(InputArray src, OutputArray dst, Size dsize,             double fx = 0, double fy = 0, int interpolation = INTER_LINEAR);
  • src — l'image source.
  • dst — l'image résultante.
  • dsize — la nouvelle taille (largeur, hauteur). Peut être spécifiée explicitement ou calculée via fx et fy.
  • fx — le facteur d'échelle en largeur (si dsize = Size()).
  • fy — le facteur d'échelle en hauteur.
  • interpolation — la méthode d'interpolation. Les principales options :
    • INTER_NEAREST — le plus proche voisin (rapide, mais avec des artefacts).
    • INTER_LINEAR — bilinéaire (par défaut, bon équilibre).
    • INTER_CUBIC — bicubique (plus lent, mais de meilleure qualité).
    • INTER_AREA — utilisé pour la réduction d'image (zone de pixels).


Exemple 1 : Réduction à une taille fixe

Mat resized;Size newSize(300, 200); // Largeur 300, hauteur 200resize(image, resized, newSize, 0, 0, INTER_AREA);imwrite("resized_fixed.jpg", resized);cout << "Taille après resize : " << resized.cols << " x " << resized.rows << endl;


Exemple 2 : Mise à l'échelle par 2 avec conservation des proportions

Mat scaled;resize(image, scaled, Size(), 0.5, 0.5, INTER_LINEAR);imwrite("scaled_half.jpg", scaled);

Si vous spécifiez dsize = Size(), les nouvelles dimensions sont calculées selon les formules : dsiz

Recommendations