C++ OpenCV

OpenCV (Open Source Computer Vision Library) ist eine Open-Source-Bibliothek für Computer Vision und maschinelles Lernen. Sie besteht aus einer Reihe von C-Funktionen und einer kleinen Anzahl von C++-Klassen und bietet außerdem Schnittstellen für Sprachen wie Python, Java und MATLAB.

Das Designziel von OpenCV ist es, eine Allzweck-Bibliothek für Computer Vision bereitzustellen, die Entwicklern hilft, komplexe visuelle Anwendungen schnell zu erstellen.

OpenCV wurde ursprünglich von Intel entwickelt, später von Willow Garage und Itseez unterstützt und wird heute von OpenCV.org gepflegt.

OpenCV wird in Bereichen wie Bildverarbeitung, Videoanalyse, Objekterkennung, Gesichtserkennung und maschinellem Lernen weit verbreitet eingesetzt.

OpenCVs Kernfunktionen

Zu den Kernfunktionen von OpenCV gehören:

  • Bildverarbeitung: wie Bildfilterung, geometrische Transformationen, Farbraumkonvertierung, Kantenerkennung usw.

  • Videoverarbeitung: wie Videoaufnahme, Hintergrundsubtraktion, Berechnung des optischen Flusses usw.

  • Merkmalserkennung und -beschreibung: Algorithmen wie SIFT, SURF, ORB usw.

  • Objekterkennung und -verfolgung: wie Haar-Kaskaden-Erkennung, HOG-Erkennung, Deep-Learning-Modelle usw.

  • Kamerakalibrierung und 3D-Rekonstruktion: wie Kamerakalibrierung, Stereosehen, Punktwolkenverarbeitung usw.

  • Maschinelles Lernen: wie traditionelle Machine-Learning-Algorithmen wie KNN, SVM, Entscheidungsbäume usw.

  • Deep Learning: Unterstützt das Laden und Ausführen von Modellen aus Frameworks wie TensorFlow, PyTorch, Caffe usw.

Modulstruktur von OpenCV

Die Funktionen von OpenCV sind in mehrere Module gegliedert, die jeweils unterschiedliche Aufgaben abdecken. Im Folgenden folgt eine kurze Einführung in die wichtigsten Module:

ModulnameFunktionsbeschreibung
CoreBietet grundlegende Datenstrukturen und Funktionen, wie Bildspeicherung, Matrixoperationen, Datei-I/O usw.
ImgprocBildverarbeitungsfunktionen, einschließlich Filterung, geometrische Transformationen, Farbraumkonvertierung, Kantenerkennung, morphologische Operationen usw.
HighguiAnzeige von Bildern und Videos, Fensterverwaltung, Benutzerinteraktion (wie Mausereignisse, Schieberegler).
VideoVideoverarbeitungsfunktionen, einschließlich Videoaufnahme, Hintergrundsubtraktion, Berechnung des optischen Flusses usw.
Calib3dKamerakalibrierung, 3D-Rekonstruktion, Posenschätzung usw.
Features2dMerkmalserkennung und -beschreibung, einschließlich Schlüsselpunkterkennung, Merkmalsabgleich usw.
ObjdetectFunktionen zur Objekterkennung, wie Haar-Cascade-Erkennung, HOG-Erkennung usw.
DNNLaden und Inferenz von Deep-Learning-Modellen, Unterstützung von Frameworks wie TensorFlow, PyTorch, Caffe usw.
MLAlgorithmen für maschinelles Lernen, wie KNN, SVM, Entscheidungsbäume usw.
FlannSchnelle approximative Nächste-Nachbarn-Suche (FLANN), verwendet für Feature-Matching und die Suche in hochdimensionalen Daten.
PhotoBildinpainting, Rauschunterdrückung, HDR-Bildgebung usw.
StitchingFunktionalität zum Zusammenfügen von Bildern, verwendet zur Erstellung von Panoramabildern.
FormFormanalyse und -abgleich.
TrackingObjekttracking-Algorithmen wie MIL, KCF, GOTURN usw.

Hauptmodule von OpenCV

Die OpenCV-Bibliothek besteht aus mehreren Modulen, die sich jeweils auf unterschiedliche Funktionen konzentrieren. Im Folgenden sind einige der Hauptmodule von OpenCV aufgeführt:

1. Core-Modul

Das Core-Modul ist das Kernmodul von OpenCV und enthält die grundlegendsten Datenstrukturen und Funktionen. Es definiert die am häufigsten verwendeten Datentypen in OpenCV, wieMat(Matrix),Point、Rectusw. Das Core-Modul bietet außerdem grundlegende mathematische Operationen, Speicherverwaltung, Datei-I/O und andere Funktionen.

  • Mat-Klasse:MatEs ist die am häufigsten verwendete Datenstruktur in OpenCV und wird zum Speichern von Bild- und Matrixdaten verwendet. Es ist ein mehrdimensionales Array, das Graustufenbilder, Farbbilder, 3D-Matrizen usw. darstellen kann.
  • Grundlegende Operationen: Das Core-Modul bietet grundlegende Operationen wie Matrixaddition, -subtraktion, -multiplikation, -division, Transposition und Inversion.

2. Imgproc-Modul

Das Imgproc-Modul ist das Bildverarbeitungsmodul und bietet eine große Anzahl von Bildverarbeitungsfunktionen. Diese Funktionen können für Bildfilterung, geometrische Transformationen, Farbraumkonvertierung, Histogrammberechnung usw. verwendet werden.

  • Bildfilterung: Einschließlich Mittelwertfilterung, Gauß-Filterung, Medianfilterung usw., verwendet zum Entfernen von Rauschen in Bildern.
  • Geometrische Transformation: Wie Bildskalierung, Rotation, affine Transformation usw.
  • Kantenerkennung: wie Canny-Kantenerkennung, Sobel-Operator usw.
  • Histogrammäqualisierung: Wird zur Verbesserung des Bildkontrasts verwendet.

3. Highgui-Modul

Das Highgui-Modul bietet Funktionalität für grafische Benutzeroberflächen (GUI), wodurch Entwickler Fenster erstellen, Bilder anzeigen, Maus- und Tastaturereignisse verarbeiten usw. können.

  • Bildanzeige: Verwenden SieimshowDie Funktion kann Bilder in einem Fenster anzeigen.
  • Videoaufnahme: Verwenden SieVideoCaptureDie Klasse kann Videoframes von einer Kamera oder aus einer Videodatei erfassen.
  • Ereignisbehandlung: Kann Ereignisse wie Mausklicks, Tastatureingaben usw. verarbeiten.

4. Video-Modul

Das Video-Modul konzentriert sich auf die Videoanalyse und bietet Videoaufnahme, Hintergrundsubtraktion, Berechnung des optischen Flusses und weitere Funktionen.

  • Videoaufnahme: Verwenden SieVideoCaptureDie Klasse kann Video-Frames von einer Kamera oder einer Videodatei lesen.
  • Hintergrundsubtraktion: Wird verwendet, um Vordergrundobjekte aus Videos zu extrahieren.
  • Berechnung des optischen Flusses: Wird verwendet, um die Bewegung von Objekten in Bildern zu schätzen.

5. Calib3d-Modul

Das Calib3d-Modul bietet Funktionen wie Kamerakalibrierung, 3D-Rekonstruktion und Stereo-Vision. Es wird hauptsächlich verwendet, um kamerabezogene geometrische Probleme zu behandeln.

  • Kamerakalibrierung: Wird verwendet, um intrinsische und extrinsische Kameraparameter zu schätzen.
  • 3D-Rekonstruktion: Rekonstruiert 3D-Szenen aus mehreren Bildern.
  • Stereo-Vision: Wird verwendet, um Tiefenkarten zu berechnen.

6. Features2d-Modul

Das Features2d-Modul bietet Funktionalität zur Merkmalserkennung und Deskriptorextraktion. Es enthält eine Vielzahl von Algorithmen zur Merkmalserkennung, wie SIFT, SURF, ORB usw.

  • Merkmalserkennung: Erkennt Schlüsselpunkte in Bildern.
  • Deskriptorextraktion: Erzeugt einen Deskriptor für jeden Schlüsselpunkt, der verwendet wird, um Merkmale in verschiedenen Bildern abzugleichen.

7. Objdetect-Modul

Das Objdetect-Modul bietet Objekterkennungsfunktionalität, insbesondere Kaskadenklassifikatoren basierend auf Haar-Merkmalen und LBP-Merkmalen.

  • Gesichtserkennung: Verwendet Haar-Merkmale und Kaskadenklassifikatoren, um Gesichter in Bildern zu erkennen.
  • Objekterkennung: Kann andere Arten von Objekten erkennen, wie Augen, Fahrzeuge usw.

8. ML-Modul

Das ML-Modul ist das Modul für maschinelles Lernen und bietet eine Vielzahl von Algorithmen für maschinelles Lernen, wie Support Vector Machines (SVM), K-Nearest Neighbors (KNN), Entscheidungsbäume usw.

  • Kategorie: Verwendet Algorithmen wie SVM, KNN zur Klassifikation.
  • Regression: Verwendet Algorithmen wie lineare Regression für die Regressionsanalyse.
  • Clustering: Verwendet Algorithmen wie K-means für die Clusteranalyse.

9. DNN-Modul

Das DNN-Modul ist ein Deep-Learning-Modul, das die Fähigkeit bietet, Deep-Learning-Modelle zu laden und auszuführen. Es unterstützt mehrere Deep-Learning-Frameworks wie TensorFlow, Caffe, ONNX usw.

  • Modellladen: Kann vorab trainierte Deep-Learning-Modelle laden.
  • Inferenz: Verwendet die geladenen Modelle für Aufgaben wie Bildklassifizierung, Objekterkennung usw.

Installation und Konfiguration von OpenCV

Bevor Sie OpenCV verwenden, müssen Sie die Entwicklungsumgebung installieren und konfigurieren.

Im Folgenden finden Sie die grundlegenden Schritte zur Installation von OpenCV:

3.1 Installation von OpenCV

Auf Linux-Systemen können Sie OpenCV mit dem Paketmanager installieren:

sudo apt-get install libopencv-dev

Unter Windows können Sie die vorkompilierten Bibliotheken von der offiziellen OpenCV-Website herunterladen oder vcpkg verwenden, um es zu installieren.

Konfigurieren der Entwicklungsumgebung

Wenn Sie OpenCV in einem C++-Projekt verwenden, müssen Sie die OpenCV-Bibliotheken zur Kompilierungszeit verlinken.

Das Folgende ist ein einfaches CMake-Konfigurationsbeispiel:

cmake_minimum_required(VERSION 3.10)
project(OpenCVExample)

find_package(OpenCV REQUIRED)

add_executable(OpenCVExample main.cpp)

target_link_libraries(OpenCVExample ${OpenCV_LIBS})

Ein einfaches OpenCV-Beispiel

Das Folgende ist ein einfaches Beispiel für die Verwendung von OpenCV zum Lesen und Anzeigen eines Bildes:

Beispiel

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

int main() {
    // Bild einlesen
    cv::Mat image = cv::imread("example.jpg");

    // Prüfen, ob das Bild erfolgreich geladen wurde
    if (image.empty()) {
        std::cout << "Bild konnte nicht geladen werden!" << std::endl;
        return -1;
    }

    // Ein Fenster erstellen und das Bild anzeigen
    cv::namedWindow("Beispiel", cv::WINDOW_AUTOSIZE);
    cv::imshow("Beispiel", image);

    // Auf Tastendruck warten
    cv::waitKey(0);

    return 0;
}

Im obigen Code verwenden wirimreadFunktion zum Lesen eines Bildes, verwendenimshowFunktion zum Anzeigen eines Bildes und verwendenwaitKeyFunktion zum Warten auf eine Tasteneingabe des Benutzers.


OpenCV-bezogene Inhalte

Laufende Nummer content
1 Installation von C++ OpenCV
2 Grundlegende Operationen mit C++ OpenCV
3 Bildverarbeitung mit C++ OpenCV
4 Grundlegende Module von C++ OpenCV
5 Merkmalserkennung und -beschreibung mit C++ OpenCV
6 Fortgeschrittene Bildverarbeitung mit C++ OpenCV
7 C++ OpenCV Videoverarbeitung
8 C++ OpenCV Maschinelles Lernen und Deep Learning
9 C++ OpenCV Projektpraxis
Weitere Erweiterungen