Einführung in die C++ OpenCV Basismodule

OpenCV ist eine leistungsstarke Computer-Vision-Bibliothek, die mehrere Module enthält, wobei sich jedes auf unterschiedliche Aufgaben konzentriert.

Im Folgenden sind einige der Kernmodule in OpenCV aufgeführt:

ModulnameHauptfunktionenGängige Klassen/Funktionen
CoreBietet grundlegende Datenstrukturen und Funktionen, wie Bildspeicherung, Matrixoperationen, Datei-I/O usw.Mat, Point, Size, Rect, Scalar, FileStorage, cv::format
ImgprocBildverarbeitungsfunktionen, einschließlich Filterung, geometrischer Transformationen, Farbraumkonvertierungen, Kantenerkennung, morphologischer Operationen, Schwellenwertverarbeitung usw.cvtColor, GaussianBlur, Canny, threshold, resize, warpAffine
HighguiAnzeige von Bildern und Videos, Fensterverwaltung, Benutzerinteraktion (wie Mausereignisse, Trackbars).imshow, namedWindow, waitKey, createTrackbar, setMouseCallback
VideoVideoverarbeitungsfunktionen, einschließlich Videoaufnahme, Hintergrundsubtraktion, Berechnung des optischen Flusses usw.VideoCapture, VideoWriter, BackgroundSubtractor, calcOpticalFlowPyrLK
Calib3dKamerakalibrierung, 3D-Rekonstruktion, Posenschätzung usw.findChessboardCorners, calibrateCamera, solvePnP, recoverPose
Features2dMerkmalserkennung und -beschreibung, einschließlich Schlüsselpunkterkennung, Merkmalsabgleich usw.ORB, SIFT, SURF, BFMatcher, FlannBasedMatcher
ObjdetectFunktionen zur Objekterkennung, wie Haar-Cascade-Erkennung, HOG-Erkennung usw.CascadeClassifier, HOGDescriptor
DNNLaden und Inferenz von Deep-Learning-Modellen, Unterstützung von Frameworks wie TensorFlow, PyTorch, Caffe usw.readNet, blobFromImage, Net::forward
MLAlgorithmen für maschinelles Lernen, wie KNN, SVM, Entscheidungsbäume usw.KNearest, SVM, DTrees, TrainData
FlannSchnelle approximative Nächste-Nachbarn-Suche (FLANN), verwendet für Feature-Matching und die Suche in hochdimensionalen Daten.Index, KDTreeIndexParams, SearchParams
PhotoBildinpainting, Rauschunterdrückung, HDR-Bildgebung usw.inpaint, fastNlMeansDenoising, createTonemap
StitchingFunktionalität zum Zusammenfügen von Bildern, verwendet zur Erstellung von Panoramen.Stitcher, Stitcher::create
FormFormanalyse und -abgleich.ShapeDistanceExtractor, ShapeContextDistanceExtractor
TrackingObjekttracking-Algorithmen wie MIL, KCF, GOTURN usw.TrackerMIL, TrackerKCF, TrackerGOTURN
VideoioVideo-Ein-/Ausgabefunktionalität, Unterstützung mehrerer Videoformate und Kameras.VideoCapture, VideoWriter, CAP_PROP_FRAME_WIDTH, CAP_PROP_FRAME_HEIGHT
ImgcodecsLesen und Speichern von Bilddateien, Unterstützung mehrerer Bildformate.imread, imwrite, imdecode, imencode
Xfeatures2dZusätzliche Algorithmen zur Merkmalserkennung und -beschreibung, wie SIFT, SURF, FREAK usw.SIFT, SURF, FREAK, DAISY
SuperresSuper-Resolution-Bildverarbeitung.SuperResolution, DenseOpticalFlowExt
OptflowOptischer Fluss und Bewegungsanalyse.calcOpticalFlowFarneback, calcOpticalFlowPyrLK
CudaGPU-beschleunigte Algorithmen für Computer Vision.cuda::GpuMat, cuda::Stream, cuda::resize
ContribZusätzliche von der Community beigesteuerte Funktionen wie Gesichtserkennung, Texterkennung usw.FaceRecognizer, TextDetector

1. Core-Modul

coreDas Core-Modul ist das Kernmodul von OpenCV und stellt grundlegende Datenstrukturen und Funktionen bereit.

Hauptfunktionen

  • Grundlegende Datenstrukturen:

    • Mat: Wird zum Speichern von Bild- und Matrixdaten verwendet.

    • Point、Size、Rect: Wird zur Darstellung von Punkten, Größen und rechteckigen Bereichen verwendet.

    • Scalar: Wird zur Darstellung von Farben oder Pixelwerten verwendet.

  • Matrixoperationen:

    • Matrixerstellung, Kopieren, Konvertierung, arithmetische Operationen usw.

  • Datei-E/A:

    • Bilder, Videos, XML/YAML-Dateien usw. lesen und speichern.

  • Gedächtnisverwaltung:

    • Automatische Speicherverwaltung mit Unterstützung für Referenzzählung.

Beispiel

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

using namespace cv;
using namespace std;

int main() {
    // Erstelle eine 3x3-Matrix
    Mat mat = (Mat_<int>(3, 3) << 1, 2, 3, 4, 5, 6, 7, 8, 9);

    // Matrix ausgeben
    cout << "Matrix:\n" << mat << endl;

    // Auf Matrixelemente zugreifen
    int value = mat.at<int>(1, 1);
    cout << "Wert bei (1, 1): " << value << endl;

    return 0;
}

2. Imgproc-Modul

imgprocDas Modul bietet Bildverarbeitungsfunktionen, darunter Filterung, geometrische Transformationen, Farbraumkonvertierungen usw.

Hauptfunktionen

  • Bildfilterung:

    • Mittelwertfilterung, Gauß-Filterung, Medianfilterung usw.

  • Geometrische Transformationen:

    • Skalierung, Rotation, affine Transformation, perspektivische Transformation usw.

  • Farbraumkonvertierungen:

    • Konvertierung von RGB in Graustufen, HSV, Lab und andere Farbräume.

  • Kantenerkennung:

    • Kantenerkennungsalgorithmen wie Canny, Sobel, Laplacian usw.

  • Morphologische Operationen:

    • Erosion, Dilatation, Öffnen, Schließen usw.

  • Schwellenwertverfahren:

    • Einfache Schwellenwertverfahren, adaptive Schwellenwertverfahren usw.

Beispiel

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

using namespace cv;

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

    // In Graustufenbild konvertieren
    Mat grayImage;
    cvtColor(image, grayImage, COLOR_BGR2GRAY);

    // Gauß-Filter
    Mat blurredImage;
    GaussianBlur(grayImage, blurredImage, Size(5, 5), 0);

    // Ergebnis anzeigen
    imshow("Originalbild", image);
    imshow("Unscharfes Bild", blurredImage);
    waitKey(0);

    return 0;
}

3. Highgui-Modul

highguiDas Modul bietet Funktionen für Bild- und Videoanzeige, Fensterverwaltung und Benutzerinteraktion.

Hauptfunktionen

  • Bildanzeige:

    • Fenster erstellen, Bilder anzeigen und auf Benutzereingabe warten.

  • Videoaufnahme:

    • Frames von einer Kamera oder Videodatei lesen.

  • Benutzerinteraktion:

    • Mausereignisse, Trackbars, Schaltflächen usw.

Beispiel

#include <opencv2/highgui.hpp>

using namespace cv;

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

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

    // Auf Tastendruck des Benutzers warten
    waitKey(0);

    // Das Fenster schließen
    destroyAllWindows();

    return 0;
}

4. Video-Modul

videoDas Modul bietet Videoverarbeitungsfunktionen, einschließlich Videoaufnahme, Hintergrundsubtraktion, optischer Flussberechnung usw.

Hauptfunktionen

  • Videoaufnahme:

    • Frames von einer Kamera oder Videodatei lesen.

  • Hintergrundsubtraktion:

    • Vordergrundobjekte aus dem Video extrahieren.

  • Optische Flussberechnung:

    • Berechnen Sie die Bewegung von Objekten in einem Bild.

Beispiel

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

using namespace cv;

int main() {
    // Kamera öffnen
    VideoCapture cap(0);
    if (!cap.isOpened()) return -1;

    Mat frame;
    while (true) {
        // Ein Frame lesen
        cap >> frame;
        if (frame.empty()) break;

        // Das Frame anzeigen
        imshow("Kamera-Feed", frame);

        // ESC zum Beenden drücken
        if (waitKey(30) == 27) break;
    }

    // Kamera freigeben und das Fenster schließen
    cap.release();
    destroyAllWindows();

    return 0;
}

5. Calib3d-Modul

calib3dDas Modul bietet Kamerakalibrierung, 3D-Rekonstruktion, Posenschätzung und weitere Funktionen.

Hauptfunktionen

  • Kamerakalibrierung:

    • Berechne die intrinsischen Kameraparameter und Verzerrungskoeffizienten.

  • 3D-Rekonstruktion:

    • Rekonstruiere eine 3D-Szene aus Multiview-Bildern.

  • Posenschätzung:

    • Schätze die 3D-Pose eines Objekts.

Beispiel

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

using namespace cv;

int main() {
    // Bild einlesen
    Mat image1 = imread("left.jpg");
    Mat image2 = imread("right.jpg");
    if (image1.empty() || image2.empty()) return -1;

    // Merkmalspunkterkennung und -zuordnung
    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);

    // Fundamentalmatrix berechnen
    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);

    // Die Fundamentalmatrix ausgeben
    cout << "Fundamentalmatrix:\n" << fundamentalMatrix << endl;

    return 0;
}

6. DNN-Modul

dnnDas Modul stellt Funktionen zum Laden und für die Inferenz von Deep-Learning-Modellen bereit.

Hauptfunktionen

  • Laden von Modellen:

    • Unterstützt Modelle aus Frameworks wie TensorFlow, PyTorch, Caffe usw.

  • Inferenz:

    • Führen Sie Klassifizierung, Objekterkennung, semantische Segmentierung usw. auf Bildern durch.

Beispiel

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

using namespace cv;
using namespace dnn;

int main() {
    // Modell laden
    Net net = readNetFromTensorflow("model.pb", "config.pbtxt");

    // Bild einlesen
    Mat image = imread("test.jpg");
    if (image.empty()) return -1;

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

    // Inferenz
    Mat output = net.forward();

    // Ausgabe verarbeiten
    // ...

    return 0;
}
Andere Erweiterungen