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 moduleDescription de la fonction
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.
ImgprocFonctions 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.
HighguiAffichage d'images et de vidéos, gestion de fenêtres, interaction utilisateur (comme les événements de souris, les curseurs).
VidéoFonctions de traitement vidéo, incluant la capture vidéo, la soustraction d'arrière-plan, le calcul de flux optique, etc.
Calib3dCalibration de caméra, reconstruction 3D, estimation de pose, etc.
Features2dDétection et description de caractéristiques, incluant la détection de points clés, l'appariement de caractéristiques, etc.
ObjdetectFonctions de détection d'objets, telles que la détection de cascades Haar, la détection HOG, etc.
DNNChargement et inférence de modèles d'apprentissage profond, prenant en charge des frameworks tels que TensorFlow, PyTorch, Caffe, etc.
MLAlgorithmes d'apprentissage automatique, tels que KNN, SVM, arbres de décision, etc.
FlannRecherche 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.
PhotoInpainting d'images, débruitage, imagerie HDR, etc.
StitchingFonctionnalité d'assemblage d'images, utilisée pour créer des images panoramiques.
FormeAnalyse et appariement de formes.
SuiviAlgorithmes 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: UtilisezimshowLa fonction peut afficher des images dans une fenêtre.
  • Capture vidéo: UtilisezVideoCaptureLa 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: UtilisezVideoCaptureLa 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 <opencv2/opencv.hpp>
#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.


Contenu associé à OpenCV

Numéro de série content
1 Installation C++ OpenCV
2 Opérations de base C++ OpenCV
3 Traitement d'images C++ OpenCV
4 Modules de base C++ OpenCV
5 Détection et description de caractéristiques C++ OpenCV
6 Traitement d'images avancé C++ OpenCV
7 Traitement vidéo avec C++ OpenCV
8 Apprentissage automatique et apprentissage profond avec C++ OpenCV
9 Pratique de projet avec C++ OpenCV
autres extensions