Bildverarbeitung in C++: resize und crop mit der OpenCV-Bibliothek

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Arbeiten mit Bildern: resize und crop in C++ mit OpenCV

\n\n

In der modernen Anwendungsentwicklung, insbesondere im Bereich Computer Vision, Web-Scraping oder der Verarbeitung von Mediendateien, besteht häufig die Notwendigkeit, Bilder programmatisch in der Größe zu ändern (resize) und zuzuschneiden (crop). Die Sprache C++ in Kombination mit der leistungsstarken Bibliothek OpenCV bietet dafür alle notwendigen Werkzeuge. In diesem Artikel werden wir detailliert besprechen, wie diese Operationen durchgeführt werden, welche Parameter die Ergebnisqualität beeinflussen, und fertige Codebeispiele präsentieren.

\n\n

Die OpenCV-Bibliothek – der De-facto-Standard für die Bildverarbeitung in C++

\n\n

OpenCV (Open Source Computer Vision Library) ist eine plattformübergreifende Open-Source-Bibliothek, die hunderte optimierte Algorithmen für die Bild- und Videoverarbeitung enthält. Sie ist in C++ geschrieben und bietet Anbindungen für Python, Java und andere Sprachen. Für C++ ist OpenCV die leistungsfähigste und funktionsreichste Lösung.

\n\n

Die wichtigsten Vorteile von OpenCV für resize- und crop-Aufgaben:

\n
    \n
  • Hohe Geschwindigkeit – alle Funktionen nutzen SIMD-Befehle und Multithreading.
  • \n
  • Flexibilität – Unterstützung verschiedener Interpolationsmethoden (bilinear, bikubisch, Lanczos-Verfahren u.a.).
  • \n
  • Komfort – Arbeit mit Bildern über die Klasse cv::Mat, die den Speicher automatisch verwaltet.
  • \n
\n\n

Installation von OpenCV für C++

\n

Um zu beginnen, muss die Bibliothek installiert werden. Die gängigste Methode ist über den Paketmanager vcpkg oder die Kompilierung aus dem Quellcode. Beispiel für die Installation über vcpkg:

\n
git clone https://github.com/Microsoft/vcpkg.git\ncd vcpkg\n./bootstrap-vcpkg.sh\n./vcpkg install opencv4
\n\n

Nach der Installation binden Sie die Bibliothek in Ihre CMakeLists.txt ein:

\n
find_package(OpenCV REQUIRED)\ntarget_link_libraries(your_project ${OpenCV_LIBS})
\n\n

Größenänderung eines Bildes (resize)

\n

Die Funktion cv::resize() ermöglicht es, die Abmessungen eines Quellbildes auf eine bestimmte Breite und Höhe zu ändern. Syntax:

\n
cv::resize(\n    InputArray src,      // Quellbild\n    OutputArray dst,     // Ergebnisbild\n    Size dsize,          // neue Größe (Breite, Höhe)\n    double fx = 0,       // Skalierungsfaktor für X (falls dsize nicht angegeben)\n    double fy = 0,       // Skalierungsfaktor für Y\n    int interpolation = INTER_LINEAR  // Interpolationsmethode\n);
\n\n

Der Parameter interpolation bestimmt den Algorithmus zur Berechnung neuer Pixel. Die wichtigsten Optionen:

\n
    \n
  • INTER_NEAREST – Nächste-Nachbar-Verfahren (schnell, aber geringe Qualität).
  • \n
  • INTER_LINEAR – Bilineare Interpolation (gute Balance zwischen Geschwindigkeit und Qualität).
  • \n
  • INTER_CUBIC – Bikubische Interpolation (höhere Qualität, aber langsamer).
  • \n
  • INTER_LANCZOS4 – Lanczos-Interpolation (beste Qualität bei Vergrößerung).
  • \n
\n\n

Beispiel für eine 2-fache Vergrößerung eines Bildes mit bikubischer Interpolation:

\n
#include <opencv2/opencv.hpp>\n#include <iostream>\n\nint main() {\n    cv::Mat src = cv::imread("input.jpg");\n    if (src.empty()) {\n        std::cerr << "Bild konnte nicht geladen werden" << std::endl;\n        return -1;\n    }\n\n    cv::Mat dst;\n    cv::resize(src, dst, cv::Size(), 2.0, 2.0, cv::INTER_CUBIC);\n\n    cv::imwrite("output_resized.jpg", dst);\n    std::cout << "Bild vergrößert und gespeichert" << std::endl;\n    return 0;\n}
\n\n

Zuschneiden eines Bildes (crop)

\n

In OpenCV gibt es keine separate Funktion zum Zuschneiden. Stattdessen wird der Mechanismus Region of Interest (ROI) verwendet – die Auswahl eines rechteckigen Bereichs im Bild. Dies erfolgt mit dem Operator () oder der Methode cv::Mat::operator().

\n\n

Syntax des Zuschneidens

Empfehlungen