C++ OpenCV
OpenCV (Open Source Computer Vision Library) est une bibliothèque logicielle open source de vision par ordinateur et d'apprentissage automatique. Elle se compose d'une série de fonctions C et d'un petit nombre de classes C++, et fournit également des interfaces pour des langages tels que Python, Java et MATLAB.
L'objectif de conception d'OpenCV est de fournir une bibliothèque de vision par ordinateur à usage général qui aide les développeurs à créer rapidement des applications visuelles complexes.
OpenCV a été initialement développé par Intel, puis soutenu par Willow Garage et Itseez, et il est maintenant maintenu par OpenCV.org.
OpenCV est largement utilisé dans des domaines tels que le traitement d'images, l'analyse vidéo, la détection d'objets, la reconnaissance faciale et l'apprentissage automatique.
Fonctions principales d'OpenCV
Les fonctionnalités principales d'OpenCV incluent :
Traitement d'images: comme le filtrage d'images, les transformations géométriques, la conversion d'espace colorimétrique, la détection de contours, etc.
Traitement vidéo: comme la capture vidéo, la soustraction d'arrière-plan, le calcul de flux optique, etc.
Détection et description de caractéristiques: algorithmes tels que SIFT, SURF, ORB, etc.
Détection et suivi d'objets: comme la détection en cascade de Haar, la détection HOG, les modèles d'apprentissage profond, etc.
Calibrage de caméra et reconstruction 3D: comme le calibrage de caméra, la vision stéréo, le traitement de nuages de points, etc.
Apprentissage automatique: comme les algorithmes traditionnels d'apprentissage automatique tels que KNN, SVM, arbres de décision, etc.
Apprentissage profond: prend en charge le chargement et l'exécution de modèles issus de frameworks tels que TensorFlow, PyTorch, Caffe, etc.
Structure des modules d'OpenCV
Les fonctions d'OpenCV sont organisées en plusieurs modules, chacun se concentrant sur différentes tâches. Voici une brève présentation des principaux modules :
| Nom du module | Description de la fonction |
|---|---|
| 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. |
| Imgproc | Fonctions de traitement d'image, incluant le filtrage, les transformations géométriques, la conversion d'espace colorimétrique, la détection de contours, les opérations morphologiques, etc. |
| Highgui | Affichage d'images et de vidéos, gestion de fenêtres, interaction utilisateur (comme les événements de souris, les curseurs). |
| Vidéo | Fonctions de traitement vidéo, incluant la capture vidéo, la soustraction d'arrière-plan, le calcul de flux optique, etc. |
| Calib3d | Calibration de caméra, reconstruction 3D, estimation de pose, etc. |
| Features2d | Détection et description de caractéristiques, incluant la détection de points clés, l'appariement de caractéristiques, etc. |
| Objdetect | Fonctions de détection d'objets, telles que la détection de cascades Haar, la détection HOG, etc. |
| DNN | Chargement et inférence de modèles d'apprentissage profond, prenant en charge des frameworks tels que TensorFlow, PyTorch, Caffe, etc. |
| ML | Algorithmes d'apprentissage automatique, tels que KNN, SVM, arbres de décision, etc. |
| Flann | Recherche approximative rapide des plus proches voisins (FLANN), utilisée pour l'appariement de caractéristiques et la recherche dans des données de grande dimension. |
| Photo | Inpainting d'images, débruitage, imagerie HDR, etc. |
| Stitching | Fonctionnalité d'assemblage d'images, utilisée pour créer des images panoramiques. |
| Forme | Analyse et appariement de formes. |
| Suivi | Algorithmes de suivi d'objets, tels que MIL, KCF, GOTURN, etc. |
Principaux modules d'OpenCV
La bibliothèque OpenCV se compose de plusieurs modules, chacun se concentrant sur des fonctions différentes. Voici quelques-uns des principaux modules d'OpenCV :
1. Module Core
Le module Core est le module central d'OpenCV, contenant les structures de données et fonctions les plus élémentaires. Il définit les types de données les plus couramment utilisés dans OpenCV, tels queMat(Matrice),Point、Rectetc. Le module Core fournit également des opérations mathématiques de base, la gestion de la mémoire, les entrées/sorties de fichiers et d'autres fonctions.
- Classe Mat:
MatIl s'agit de la structure de données la plus couramment utilisée dans OpenCV, servant à stocker des données d'image et de matrice. C'est un tableau multidimensionnel qui peut représenter des images en niveaux de gris, des images en couleur, des matrices 3D, etc. - Opérations de base: Le module Core fournit des opérations de base telles que l'addition, la soustraction, la multiplication, la division, la transposition et l'inversion de matrices.
2. Module Imgproc
Le module Imgproc est le module de traitement d'images, fournissant un grand nombre de fonctions de traitement d'images. Ces fonctions peuvent être utilisées pour le filtrage d'images, les transformations géométriques, la conversion d'espace colorimétrique, le calcul d'histogrammes, etc.
- Filtrage d'images: Y compris le filtrage par moyenne, le filtrage gaussien, le filtrage médian, etc., utilisés pour éliminer le bruit dans les images.
- Transformation géométrique: Comme la mise à l'échelle d'image, la rotation, la transformation affine, etc.
- Détection de contours: comme la détection de contours de Canny, l'opérateur Sobel, etc.
- Égalisation d'histogramme: Utilisée pour améliorer le contraste de l'image.
3. Module Highgui
Le module Highgui fournit des fonctionnalités d'interface utilisateur graphique (GUI), permettant aux développeurs de créer des fenêtres, d'afficher des images, de gérer les événements de souris et de clavier, etc.
- Affichage d'image: Utilisez
imshowLa fonction peut afficher des images dans une fenêtre. - Capture vidéo: Utilisez
VideoCaptureLa classe peut capturer des trames vidéo à partir d'une caméra ou d'un fichier vidéo. - Gestion des événements: Peut gérer des événements tels que les clics de souris, la saisie au clavier, etc.
4. Module Vidéo
Le module Vidéo se concentre sur l'analyse vidéo, en fournissant la capture vidéo, la soustraction d'arrière-plan, le calcul de flux optique et d'autres fonctions.
- Capture vidéo: Utilisez
VideoCaptureLa classe peut lire des images vidéo à partir d'une caméra ou d'un fichier vidéo. - Soustraction d'arrière-plan: Utilisée pour extraire les objets de premier plan des vidéos.
- Calcul de flux optique: Utilisé pour estimer le mouvement des objets dans les images.
5. Module Calib3d
Le module Calib3d fournit des fonctions telles que la calibration de caméra, la reconstruction 3D et la vision stéréo. Il est principalement utilisé pour traiter les problèmes géométriques liés à la caméra.
- Calibration de caméra: Utilisée pour estimer les paramètres intrinsèques et extrinsèques de la caméra.
- Reconstruction 3D: Reconstruire des scènes 3D à partir de plusieurs images.
- Vision stéréo: Utilisée pour calculer des cartes de profondeur.
6. Module Features2d
Le module Features2d fournit des fonctionnalités de détection de caractéristiques et d'extraction de descripteurs. Il inclut une variété d'algorithmes de détection de caractéristiques, tels que SIFT, SURF, ORB, etc.
- Détection de caractéristiques: Détecte les points clés dans les images.
- Extraction de descripteurs: Génère un descripteur pour chaque point clé, utilisé pour mettre en correspondance les caractéristiques dans différentes images.
7. Module Objdetect
Le module Objdetect fournit une fonctionnalité de détection d'objets, en particulier des classificateurs en cascade basés sur les caractéristiques de Haar et les caractéristiques LBP.
- Détection de visages: Utilise des caractéristiques de Haar et des classificateurs en cascade pour détecter des visages dans les images.
- Détection d'objets: Peut détecter d'autres types d'objets, tels que les yeux, les véhicules, etc.
8. Module ML
Le module ML est le module d'apprentissage automatique, fournissant une variété d'algorithmes d'apprentissage automatique, tels que les machines à vecteurs de support (SVM), les k plus proches voisins (KNN), les arbres de décision, etc.
- Catégorie: Utilise des algorithmes tels que SVM, KNN pour la classification.
- Régression: Utilise des algorithmes tels que la régression linéaire pour l'analyse de régression.
- Regroupement: Utilise des algorithmes tels que K-means pour l'analyse de regroupement.
9. Module DNN
Le module DNN est un module d'apprentissage profond qui permet de charger et d'exécuter des modèles d'apprentissage profond. Il prend en charge plusieurs frameworks d'apprentissage profond, tels que TensorFlow, Caffe, ONNX, etc.
- Chargement de modèle: Peut charger des modèles d'apprentissage profond pré-entraînés.
- Inférence: Utilise les modèles chargés pour des tâches telles que la classification d'images, la détection d'objets, etc.
Installation et configuration d'OpenCV
Avant d'utiliser OpenCV, vous devez installer et configurer l'environnement de développement.
Voici les étapes de base pour installer OpenCV :3.1 Installation d'OpenCV
Sur les systèmes Linux, vous pouvez installer OpenCV à l'aide du gestionnaire de paquets :
sudo apt-get install libopencv-dev
Sous Windows, vous pouvez télécharger les bibliothèques précompilées depuis le site Web officiel d'OpenCV, ou utiliser vcpkg pour l'installer.
Configuration de l'environnement de développement
Lorsque vous utilisez OpenCV dans un projet C++, vous devez lier les bibliothèques OpenCV au moment de la compilation.
Voici un exemple simple de configuration CMake :
cmake_minimum_required(VERSION 3.10)
project(OpenCVExample)
find_package(OpenCV REQUIRED)
add_executable(OpenCVExample main.cpp)
target_link_libraries(OpenCVExample ${OpenCV_LIBS})
Un exemple OpenCV simple
Voici un exemple simple d'utilisation d'OpenCV pour lire et afficher une image :
Exemple
#include <iostream>
int main() {
// Lire l'image
cv::Mat image = cv::imread("example.jpg");
// Vérifier si l'image a été chargée avec succès
if (image.empty()) {
std::cout << "Impossible de charger l'image !" << std::endl;
return -1;
}
// Créer une fenêtre et afficher l'image
cv::namedWindow("Exemple", cv::WINDOW_AUTOSIZE);
cv::imshow("Exemple", image);
// Attendre une pression de touche
cv::waitKey(0);
return 0;
}
Dans le code ci-dessus, nous utilisonsimreadfonction pour lire une image, utilisonsimshowfonction pour afficher une image, et utilisonswaitKeyfonction pour attendre la saisie d'une touche par l'utilisateur.