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

OpenCV est une puissante bibliothèque de vision par ordinateur contenant plusieurs modules, chacun se concentrant sur différentes tâches.

Voici quelques-uns des modules principaux d'OpenCV :

Nom du moduleFonctions principalesClasses/Fonctions courantes
CoreFournit des structures de données et des fonctions de base, telles que le stockage d'images, les opérations matricielles, les entrées/sorties de fichiers, etc.Mat, Point, Size, Rect, Scalar, FileStorage, cv::format
ImgprocFonctions de traitement d'image, notamment le filtrage, les transformations géométriques, les conversions d'espace colorimétrique, la détection de contours, les opérations morphologiques, le seuillage, etc.cvtColor, GaussianBlur, Canny, threshold, resize, warpAffine
HighguiAffichage d'images et de vidéos, gestion des fenêtres, interaction utilisateur (tels que les événements de souris, les barres de suivi).imshow, namedWindow, waitKey, createTrackbar, setMouseCallback
VidéoFonctions de traitement vidéo, incluant la capture vidéo, la soustraction d'arrière-plan, le calcul de flux optique, etc.VideoCapture, VideoWriter, BackgroundSubtractor, calcOpticalFlowPyrLK
Calib3dCalibration de caméra, reconstruction 3D, estimation de pose, etc.findChessboardCorners, calibrateCamera, solvePnP, recoverPose
Features2dDétection et description de caractéristiques, incluant la détection de points clés, l'appariement de caractéristiques, etc.ORB, SIFT, SURF, BFMatcher, FlannBasedMatcher
ObjdetectFonctions de détection d'objets, telles que la détection de cascades Haar, la détection HOG, etc.CascadeClassifier, HOGDescriptor
DNNChargement et inférence de modèles d'apprentissage profond, prenant en charge des frameworks tels que TensorFlow, PyTorch, Caffe, etc.readNet, blobFromImage, Net::forward
MLAlgorithmes d'apprentissage automatique, tels que KNN, SVM, arbres de décision, etc.KNearest, SVM, DTrees, TrainData
FlannRecherche rapide approximative des plus proches voisins (FLANN), utilisée pour la mise en correspondance de caractéristiques et la recherche dans des données de haute dimension.Index, KDTreeIndexParams, SearchParams
PhotoInpainting d'images, débruitage, imagerie HDR, etc.inpaint, fastNlMeansDenoising, createTonemap
StitchingFonctionnalité d'assemblage d'images, utilisée pour créer des panoramas.Stitcher, Stitcher::create
FormeAnalyse et appariement de formes.ShapeDistanceExtractor, ShapeContextDistanceExtractor
SuiviAlgorithmes de suivi d'objets, tels que MIL, KCF, GOTURN, etc.TrackerMIL, TrackerKCF, TrackerGOTURN
VideoioFonctionnalité d'entrée/sortie vidéo, prenant en charge plusieurs formats vidéo et caméras.VideoCapture, VideoWriter, CAP_PROP_FRAME_WIDTH, CAP_PROP_FRAME_HEIGHT
ImgcodecsLecture et enregistrement de fichiers image, prenant en charge plusieurs formats d'image.imread, imwrite, imdecode, imencode
Xfeatures2dAlgorithmes supplémentaires de détection et de description de caractéristiques, tels que SIFT, SURF, FREAK, etc.SIFT, SURF, FREAK, DAISY
SuperresTraitement d'images en super-résolution.SuperResolution, DenseOpticalFlowExt
OptflowCalcul du flux optique et analyse du mouvement.calcOpticalFlowFarneback, calcOpticalFlowPyrLK
CudaAlgorithmes de vision par ordinateur accélérés par GPU.cuda::GpuMat, cuda::Stream, cuda::resize
ContribFonctionnalités supplémentaires fournies par la communauté, telles que la reconnaissance faciale, la détection de texte, etc.FaceRecognizer, TextDetector

1. Module Core

coreLe module Core est le module central d'OpenCV, fournissant des structures de données et des fonctions de base.

Fonctions principales

  • Structures de données de base:

    • Mat: Utilisé pour stocker des données d'image et de matrice.

    • Point、Size、Rect: Utilisé pour représenter des points, des tailles et des régions rectangulaires.

    • Scalar: Utilisé pour représenter des couleurs ou des valeurs de pixels.

  • Opérations matricielles:

    • Création, copie, conversion de matrices, opérations arithmétiques, etc.

  • E/S de fichiers:

    • Lire et enregistrer des images, des vidéos, des fichiers XML/YAML, etc.

  • Gestion de la mémoire:

    • Gestion automatique de la mémoire avec prise en charge du comptage de références.

Exemple

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

using namespace cv;
using namespace std;

int main() {
    // Créer une matrice 3x3
    Mat mat = (Mat_<int>(3, 3) << 1, 2, 3, 4, 5, 6, 7, 8, 9);

    // Afficher la matrice
    cout << "Matrice :\n" << mat << endl;

    // Accéder aux éléments de la matrice
    int value = mat.at<int>(1, 1);
    cout << "Valeur à (1, 1) : " << value << endl;

    return 0;
}

2. Module Imgproc

imgprocLe module fournit des fonctions de traitement d'image, notamment le filtrage, les transformations géométriques, les conversions d'espace colorimétrique, etc.

Fonctions principales

  • Filtrage d'image:

    • Filtrage par moyenne, filtrage gaussien, filtrage médian, etc.

  • Transformations géométriques:

    • Mise à l'échelle, rotation, transformation affine, transformation de perspective, etc.

  • Conversions d'espaces colorimétriques:

    • Conversion de RGB en niveaux de gris, HSV, Lab, et autres espaces colorimétriques.

  • Détection de contours:

    • Algorithmes de détection de contours tels que Canny, Sobel, Laplacien, etc.

  • Opérations morphologiques:

    • Érosion, dilatation, ouverture, fermeture, etc.

  • Seuillage:

    • Seuillage simple, seuillage adaptatif, etc.

Exemple

#include <opencv2/imgproc.hpp>
#include <opencv2/highgui.hpp>

using namespace cv;

int main() {
    // Lire l'image
    Mat image = imread("test.jpg");
    if (image.empty()) return -1;

    // Convertir en image en niveaux de gris
    Mat grayImage;
    cvtColor(image, grayImage, COLOR_BGR2GRAY);

    // Filtre gaussien
    Mat blurredImage;
    GaussianBlur(grayImage, blurredImage, Size(5, 5), 0);

    // Afficher le résultat
    imshow("Image originale", image);
    imshow("Image floue", blurredImage);
    waitKey(0);

    return 0;
}

3. Module Highgui

highguiLe module fournit des fonctions d'affichage d'images et de vidéos, de gestion de fenêtres et d'interaction utilisateur.

Fonctions principales

  • Affichage d'images:

    • Créer des fenêtres, afficher des images et attendre la saisie de l'utilisateur.

  • Capture vidéo:

    • Lire des images à partir d'une caméra ou d'un fichier vidéo.

  • Interaction utilisateur:

    • Événements de souris, barres de suivi, boutons, etc.

Exemple

#include <opencv2/highgui.hpp>

using namespace cv;

int main() {
    // Lire l'image
    Mat image = imread("test.jpg");
    if (image.empty()) return -1;

    // Créer une fenêtre et afficher l'image
    namedWindow("Fenêtre d'affichage", WINDOW_AUTOSIZE);
    imshow("Fenêtre d'affichage", image);

    // Attendre la pression d'une touche de l'utilisateur
    waitKey(0);

    // Fermer la fenêtre
    destroyAllWindows();

    return 0;
}

4. Module Vidéo

videoLe module fournit des fonctions de traitement vidéo, notamment la capture vidéo, la soustraction d'arrière-plan, le calcul du flux optique, etc.

Fonctions principales

  • Capture vidéo:

    • Lire des images à partir d'une caméra ou d'un fichier vidéo.

  • Soustraction d'arrière-plan:

    • Extraire les objets de premier plan de la vidéo.

  • Calcul du flux optique:

    • Calculer le mouvement des objets dans une image.

Exemple

#include <opencv2/videoio.hpp>
#include <opencv2/highgui.hpp>

using namespace cv;

int main() {
    // Ouvrir la caméra
    VideoCapture cap(0);
    if (!cap.isOpened()) return -1;

    Mat frame;
    while (true) {
        // Lire une image
        cap >> frame;
        if (frame.empty()) break;

        // Afficher l'image
        imshow("Flux de la caméra", frame);

        // Appuyer sur ESC pour quitter
        if (waitKey(30) == 27) break;
    }

    // Libérer la caméra et fermer la fenêtre
    cap.release();
    destroyAllWindows();

    return 0;
}

5. Module Calib3d

calib3dLe module fournit la calibration de caméra, la reconstruction 3D, l'estimation de pose et d'autres fonctions.

Fonctions principales

  • Calibration de caméra:

    • Calculer les paramètres intrinsèques de la caméra et les coefficients de distorsion.

  • Reconstruction 3D:

    • Reconstruire une scène 3D à partir d'images multi-vues.

  • Estimation de pose:

    • Estimer la pose 3D d'un objet.

Exemple

#include <opencv2/calib3d.hpp>
#include <opencv2/highgui.hpp>

using namespace cv;

int main() {
    // Lire l'image
    Mat image1 = imread("left.jpg");
    Mat image2 = imread("right.jpg");
    if (image1.empty() || image2.empty()) return -1;

    // Détection et appariement de points caractéristiques
    Ptr<Feature2D> detector = ORB::create();
    vector<KeyPoint> keypoints1, keypoints2;
    Mat descriptors1, descriptors2;
    detector->detectAndCompute(image1, noArray(), keypoints1, descriptors1);
    detector->detectAndCompute(image2, noArray(), keypoints2, descriptors2);

    BFMatcher matcher(NORM_HAMMING);
    vector<DMatch> matches;
    matcher.match(descriptors1, descriptors2, matches);

    // Calcul de la matrice fondamentale
    vector<Point2f> points1, points2;
    for (const auto& match : matches) {
        points1.push_back(keypoints1[match.queryIdx].pt);
        points2.push_back(keypoints2[match.trainIdx].pt);
    }
    Mat fundamentalMatrix = findFundamentalMat(points1, points2, FM_RANSAC);

    // Afficher la matrice fondamentale
    cout << "Matrice fondamentale :\n" << fundamentalMatrix << endl;

    return 0;
}

6. Module DNN

dnnLe module fournit des fonctions pour le chargement et l'inférence de modèles d'apprentissage profond.

Fonctions principales

  • Chargement du modèle:

    • Prend en charge les modèles de frameworks tels que TensorFlow, PyTorch, Caffe, etc.

  • Inférence:

    • Effectuer la classification, la détection d'objets, la segmentation sémantique, etc. sur les images.

Exemple

#include <opencv2/dnn.hpp>
#include <opencv2/highgui.hpp>

using namespace cv;
using namespace dnn;

int main() {
    // Charger le modèle
    Net net = readNetFromTensorflow("model.pb", "config.pbtxt");

    // Lire l'image
    Mat image = imread("test.jpg");
    if (image.empty()) return -1;

    // Prétraitement
    Mat blob = blobFromImage(image, 1.0, Size(300, 300), Scalar(127.5, 127.5, 127.5), true, false);
    net.setInput(blob);

    // Inférence
    Mat output = net.forward();

    // Traiter la sortie
    // ...

    return 0;
}
Autres extensions