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:
| Modulname | Hauptfunktionen | Gängige Klassen/Funktionen |
|---|---|---|
| Core | Bietet grundlegende Datenstrukturen und Funktionen, wie Bildspeicherung, Matrixoperationen, Datei-I/O usw. | Mat, Point, Size, Rect, Scalar, FileStorage, cv::format |
| Imgproc | Bildverarbeitungsfunktionen, einschließlich Filterung, geometrischer Transformationen, Farbraumkonvertierungen, Kantenerkennung, morphologischer Operationen, Schwellenwertverarbeitung usw. | cvtColor, GaussianBlur, Canny, threshold, resize, warpAffine |
| Highgui | Anzeige von Bildern und Videos, Fensterverwaltung, Benutzerinteraktion (wie Mausereignisse, Trackbars). | imshow, namedWindow, waitKey, createTrackbar, setMouseCallback |
| Video | Videoverarbeitungsfunktionen, einschließlich Videoaufnahme, Hintergrundsubtraktion, Berechnung des optischen Flusses usw. | VideoCapture, VideoWriter, BackgroundSubtractor, calcOpticalFlowPyrLK |
| Calib3d | Kamerakalibrierung, 3D-Rekonstruktion, Posenschätzung usw. | findChessboardCorners, calibrateCamera, solvePnP, recoverPose |
| Features2d | Merkmalserkennung und -beschreibung, einschließlich Schlüsselpunkterkennung, Merkmalsabgleich usw. | ORB, SIFT, SURF, BFMatcher, FlannBasedMatcher |
| Objdetect | Funktionen zur Objekterkennung, wie Haar-Cascade-Erkennung, HOG-Erkennung usw. | CascadeClassifier, HOGDescriptor |
| DNN | Laden und Inferenz von Deep-Learning-Modellen, Unterstützung von Frameworks wie TensorFlow, PyTorch, Caffe usw. | readNet, blobFromImage, Net::forward |
| ML | Algorithmen für maschinelles Lernen, wie KNN, SVM, Entscheidungsbäume usw. | KNearest, SVM, DTrees, TrainData |
| Flann | Schnelle approximative Nächste-Nachbarn-Suche (FLANN), verwendet für Feature-Matching und die Suche in hochdimensionalen Daten. | Index, KDTreeIndexParams, SearchParams |
| Photo | Bildinpainting, Rauschunterdrückung, HDR-Bildgebung usw. | inpaint, fastNlMeansDenoising, createTonemap |
| Stitching | Funktionalität zum Zusammenfügen von Bildern, verwendet zur Erstellung von Panoramen. | Stitcher, Stitcher::create |
| Form | Formanalyse und -abgleich. | ShapeDistanceExtractor, ShapeContextDistanceExtractor |
| Tracking | Objekttracking-Algorithmen wie MIL, KCF, GOTURN usw. | TrackerMIL, TrackerKCF, TrackerGOTURN |
| Videoio | Video-Ein-/Ausgabefunktionalität, Unterstützung mehrerer Videoformate und Kameras. | VideoCapture, VideoWriter, CAP_PROP_FRAME_WIDTH, CAP_PROP_FRAME_HEIGHT |
| Imgcodecs | Lesen und Speichern von Bilddateien, Unterstützung mehrerer Bildformate. | imread, imwrite, imdecode, imencode |
| Xfeatures2d | Zusätzliche Algorithmen zur Merkmalserkennung und -beschreibung, wie SIFT, SURF, FREAK usw. | SIFT, SURF, FREAK, DAISY |
| Superres | Super-Resolution-Bildverarbeitung. | SuperResolution, DenseOpticalFlowExt |
| Optflow | Optischer Fluss und Bewegungsanalyse. | calcOpticalFlowFarneback, calcOpticalFlowPyrLK |
| Cuda | GPU-beschleunigte Algorithmen für Computer Vision. | cuda::GpuMat, cuda::Stream, cuda::resize |
| Contrib | Zusä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 <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/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
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/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/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/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;
}