Arbeiten mit Bildern: resize und crop in C++ mit OpenCV
\n\nIn 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\nDie OpenCV-Bibliothek – der De-facto-Standard für die Bildverarbeitung in C++
\n\nOpenCV (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\nDie 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
Installation von OpenCV für C++
\nUm 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:
\ngit clone https://github.com/Microsoft/vcpkg.git\ncd vcpkg\n./bootstrap-vcpkg.sh\n./vcpkg install opencv4\n\nNach der Installation binden Sie die Bibliothek in Ihre CMakeLists.txt ein:
\nfind_package(OpenCV REQUIRED)\ntarget_link_libraries(your_project ${OpenCV_LIBS})\n\nGrößenänderung eines Bildes (resize)
\nDie Funktion cv::resize() ermöglicht es, die Abmessungen eines Quellbildes auf eine bestimmte Breite und Höhe zu ändern. Syntax:
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\nDer Parameter interpolation bestimmt den Algorithmus zur Berechnung neuer Pixel. Die wichtigsten Optionen:
- \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
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\nZuschneiden eines Bildes (crop)
\nIn 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().
Syntax des Zuschneidens
Auch in der Bibliothek
Arbeiten mit Excel in JavaScript (Node.js): Bibliotheken und Beispiele
node-cron — Aufgabenplaner für Node.js
Internationalisierung (i18n) in TypeScript: Vollständiger Leitfaden