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 module | Fonctions principales | Classes/Fonctions courantes |
|---|---|---|
| Core | Fournit 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 |
| Imgproc | Fonctions 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 |
| Highgui | Affichage 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éo | Fonctions 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 |
| Calib3d | Calibration de caméra, reconstruction 3D, estimation de pose, etc. | findChessboardCorners, calibrateCamera, solvePnP, recoverPose |
| Features2d | Dé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 |
| Objdetect | Fonctions de détection d'objets, telles que la détection de cascades Haar, la détection HOG, etc. | CascadeClassifier, HOGDescriptor |
| DNN | Chargement et inférence de modèles d'apprentissage profond, prenant en charge des frameworks tels que TensorFlow, PyTorch, Caffe, etc. | readNet, blobFromImage, Net::forward |
| ML | Algorithmes d'apprentissage automatique, tels que KNN, SVM, arbres de décision, etc. | KNearest, SVM, DTrees, TrainData |
| Flann | Recherche 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 |
| Photo | Inpainting d'images, débruitage, imagerie HDR, etc. | inpaint, fastNlMeansDenoising, createTonemap |
| Stitching | Fonctionnalité d'assemblage d'images, utilisée pour créer des panoramas. | Stitcher, Stitcher::create |
| Forme | Analyse et appariement de formes. | ShapeDistanceExtractor, ShapeContextDistanceExtractor |
| Suivi | Algorithmes de suivi d'objets, tels que MIL, KCF, GOTURN, etc. | TrackerMIL, TrackerKCF, TrackerGOTURN |
| Videoio | Fonctionnalité 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 |
| Imgcodecs | Lecture et enregistrement de fichiers image, prenant en charge plusieurs formats d'image. | imread, imwrite, imdecode, imencode |
| Xfeatures2d | Algorithmes supplémentaires de détection et de description de caractéristiques, tels que SIFT, SURF, FREAK, etc. | SIFT, SURF, FREAK, DAISY |
| Superres | Traitement d'images en super-résolution. | SuperResolution, DenseOpticalFlowExt |
| Optflow | Calcul du flux optique et analyse du mouvement. | calcOpticalFlowFarneback, calcOpticalFlowPyrLK |
| Cuda | Algorithmes de vision par ordinateur accélérés par GPU. | cuda::GpuMat, cuda::Stream, cuda::resize |
| Contrib | Fonctionnalité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 <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/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
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/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/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/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;
}