Introduction aux modules de base d'OpenCV en C++

OpenCV (Open Source Computer Vision Library) constitue une bibliothèque open source performsante pour la vision par ordinateur et le traitement d'image. Cette librairie trouve son application dans de nombreux domaines tels que le traitement d'image, l'analyse vidéo et l'apprentissage automatique. En C++, OpenCV offre plusieurs modules spécialisés, chacun ciblant des fonctionnalités spécifiques. Cette présentation des principaux modules OpenCV, basée sur la version 4.x, a pour objectif de vous familiariser rapidement avec leurs capacités et domaines d'utilisation.

1. Module principal (core)

  • Fonctionnalités : Fournit les structures de données fondamentales, les opérations matricielles et les outils mathématiques de base, constituant ainsi le socle d'OpenCV.
  • Éléments clés :
  • Mat : Structure de données centrale pour le stockage des images ou matrices.
  • Opérations de base : Addition, soustraction, multiplication, division, transposition et inversion de matrices.
  • Exemple :
#include <opencv2/core.hpp>
using namespace cv;
Mat image = Mat::zeros(150, 150, CV_8UC3); // Création d'une image RGB 150x150
Mat matrice = (Mat_<float>(2, 2) << 5, 10, 15, 20); // Matrice 2x2
Mat inversee;
invert(matrice, inversee); // Inversion matricielle


  • Utilisations : Stockage d'images, opérations mathématiques, préparation des données.

2. Module de traitement d'image (imgproc)

  • Fonctionnalités : Propose des capacités de traitement d'image incluant le filtrage, les transformations, la détection de contours et l'analyse de formes.
  • Éléments clés :
  • Filtrage : Flou gaussien (GaussianBlur), filtre médian (medianBlur).
  • Seuillage : threshold, adaptiveThreshold.
  • Détection de contours : Algorithme de Canny (Canny).
  • Transformations géométriques : Redimensionnement (resize), rotation (warpAffine), transformation perspective (warpPerspective).
  • Détection de contours : findContours, drawContours.
  • Exemple :
#include <opencv2/imgproc.hpp>
Mat source = imread("photo.jpg", IMREAD_GRAYSCALE);
Mat floue, contours;
GaussianBlur(source, floue, Size(7, 7), 0);
Canny(floue, contours, 50, 150);


  • Utilisations : Amélioration d'images, segmentation, extraction de caractéristiques.

3. Module d'interface utilisateur graphique (highgui)

  • Fonctionnalités : Permet l'affichage d'images et de vidéos, les interactions utilisateur ainsi que la lecture et l'écriture de fichiers.
  • Éléments clés :
  • Lecture/écriture d'images : imread, imwrite.
  • Gestion des fenêtres : namedWindow, imshow, destroyWindow.
  • Interactions clavier/souris : waitKey, callback souris (setMouseCallback).
  • Exemple :
#include <opencv2/highgui.hpp>
Mat image = imread("photo.jpg");
namedWindow("Visionneuse", WINDOW_AUTOSIZE);
imshow("Visionneuse", image);
waitKey(0);


  • Utilisations : Visualisation d'images, débogage interactif.

4. Module vidéo (video)

  • Fonctionnalités : Gère le traitement des flux vidéo et l'analyse de mouvement.
  • Éléments clés :
  • Lecture/écriture vidéo : VideoCapture (lecture vidéo/caméra), VideoWriter (enregistrement vidéo).
  • Suivi de mouvement : Flux optique (calcOpticalFlowPyrLK), segmentation de fond (BackgroundSubtractor).
  • Exemple :
#include <opencv2/video.hpp>
VideoCapture capture(0); // Accès à la caméra par défaut
if (!capture.isOpened()) return -1;
Mat trame;
while (capture.read(trame)) {
    imshow("Caméra", trame);
    if (waitKey(30) == 27) break; // Sortie avec ESC
}


  • Utilisations : Traitement vidéo, analyse temps réel.

5. Module de codage d'images (imgcodecs)

  • Fonctionnalités : Gère l'encodage et le décodage des fichiers image.
  • Éléments clés :
  • Prise en charge de multiples formats : JPG, PNG, BMP, etc.
  • Extension des fonctions imread et imwrite avec contrôle des paramètres (qualité JPEG par exemple).
  • Exemple :
#include <opencv2/imgcodecs.hpp>
Mat image = imread("photo.png", IMREAD_GRAYSCALE);
imwrite("resultat.jpg", image, {IMWRITE_JPEG_QUALITY, 85});


  • Utilisations : Conversion de format, compression d'images.

6. Module de détection de caractéristiques (features2d)

  • Fonctionnalités : Détecte et décrit les points caractéristiques des images pour l'appariement et la reconnaissance.
  • Éléments clés :
  • Détection de caractéristiques : SIFT, SURF, ORB (ORB::create()).
  • Appariement de caractéristiques : BFMatcher, FlannBasedMatcher.
  • Exemple :
#include <opencv2/features2d.hpp>
Mat imageA = imread("img_a.jpg", IMREAD_GRAYSCALE);
Mat imageB = imread("img_b.jpg", IMREAD_GRAYSCALE);
Ptr<ORB> detecteur = ORB::create();
vector<KeyPoint> pointsA, pointsB;
Mat descripteursA, descripteursB;
detecteur->detectAndCompute(imageA, noArray(), pointsA, descripteursA);
detecteur->detectAndCompute(imageB, noArray(), pointsB, descripteursB);
BFMatcher apparieur(NORM_HAMMING);
vector<DMatch> correspondances;
apparieur.match(descripteursA, descripteursB, correspondances);


  • Utilisations : Appariement d'images, reconnaissance d'objets.

7. Module de calibration caméra et reconstruction 3D (calib3d)

  • Fonctionnalités : Calibration caméra, vision stéréoscopique et reconstruction 3D.
  • Éléments clés :
  • Calibration caméra : calibrateCamera.
  • Appariement stéréo : StereoBM, StereoSGBM.
  • Estimation de pose : solvePnP.
  • Utilisations : Reconstruction 3D, réalité augmentée.

8. Module d'apprentissage automatique (ml)

  • Fonctionnalités : Propose des algorithmes d'apprentissage automatique, utilisables en combinaison avec le traitement d'image.
  • Éléments clés :
  • Algorithmes supportés : SVM, arbres de décision, KNN, réseaux de neurones, etc.
  • Exemple :
#include <opencv2/ml.hpp>
Ptr<ml::SVM> classificateur = ml::SVM::create();
classificateur->setType(ml::SVM::C_SVC);
classificateur->setKernel(ml::SVM::LINEAR);


  • Utilisations : Classification d'images, détection d'objets.

9. Autres modules

  • objdetect : Détection d'objets, notamment détection de visages (Haar, DNN).
#include <opencv2/objdetect.hpp>
CascadeClassifier classificateur_visage;
classificateur_visage.load("haarcascade_frontalface_default.xml");


  • photo : Restauration d'images, débruitage.
  • stitching : Assemblage d'images, création de panoramas.
  • dnn : Support de l'apprentissage profond, chargement de modèles TensorFlow, PyTorch.

10. Recommandations d'utilisation

  • Sélection du module : Choisissez le module adopté à votre tâche, comme imgproc pour l'amélioration d'images ou video pour le traitement vidéo.
  • Fichiers d'en-tête : OpenCV 4.x utilise le format <opencv2/module.hpp>, par exemple <opencv2/imgproc.hpp>.
  • Optimisation des performances : Privilégiez les fonctions natives plutôt que le traitement manuel pixel par pixel.
  • Documentation officielle : Consultez https://docs.opencv.org/4.x/ pour obtenir les dernières API et exemples.

11. Exemple intégré

Ce code démontre l'utilisation combinée de plusieurs modules pour charger, traiter et détecter les caractéristiques d'une图像 :

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

using namespace cv;
using namespace std;

int main() {
   // Module core : chargement de l'image
   Mat image = imread("photo.jpg", IMREAD_GRAYSCALE);
   if (image.empty()) {
       cout << "Échec du chargement de l'image !" << endl;
       return -1;
   }

   // Module imgproc : application du flou gaussien
   Mat image_flouee;
   GaussianBlur(image, image_flouee, Size(5, 5), 0);

   // Module features2d : détection de caractéristiques ORB
   Ptr<ORB> detecteur = ORB::create();
   vector<KeyPoint> points_cles;
   Mat descripteurs;
   detecteur->detectAndCompute(image_flouee, noArray(), points_cles, descripteurs);

   // Module highgui : affichage des résultats
   Mat resultat;
   drawKeypoints(image, points_cles, resultat, Scalar::all(-1));
   imshow("Points clés détectés", resultat);
   waitKey(0);

   // Module imgcodecs : enregistrement du résultat
   imwrite("points_cles.jpg", resultat);

   destroyAllWindows();
   return 0;
}


Si vous souhaitez une présentation approfondie d'un module particulier (comme dnn ou stitching) ou des exemples de code pour des tâches spécifiques, n'hésitez pas à me le signaler !

Étiquettes: OpenCV cpp Computer-Vision image-processing vision-par-ordinateur

Publié le 6 juin à 23h20