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

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++

In der modernen Computergrafik und Computer Vision sind die Operationen zur Größenänderung (resize) und zum Zuschneiden (crop) von Bildern grundlegend. Egal, ob Sie eine Anwendung zur Fotobearbeitung, ein Gesichtserkennungssystem entwickeln oder einfach nur Bilder für ein neuronales Netz vorbereiten möchten – ohne diese Funktionen geht es nicht. In diesem Artikel werden wir detailliert betrachten, wie man resize und crop in der Sprache C++ mit der leistungsstarken Bibliothek OpenCV durchführt.



Warum OpenCV?

OpenCV (Open Source Computer Vision Library) ist der De-facto-Standard für Aufgaben der Computer Vision. Sie ist in C/C++ geschrieben und bietet hunderte optimierte Algorithmen. Für die Arbeit mit resize und crop benötigen wir nur wenige Funktionen, aber ihre Leistung und Flexibilität machen OpenCV zur idealen Wahl.

OpenCV kann über einen Paketmanager installiert werden (z. B. vcpkg install opencv oder brew install opencv) oder durch Kompilieren aus dem Quellcode. Details zur Installation gehen über den Rahmen dieses Artikels hinaus, es wird jedoch vorausgesetzt, dass Sie ein Projekt mit der eingebundenen Bibliothek eingerichtet haben.



Vorbereitung: Bild laden

Bevor wir etwas ändern, muss das Bild geladen werden. In OpenCV geschieht dies mit der Funktion imread():

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

using namespace cv;using namespace std;

int main() { // Bild laden Mat image = imread("input.jpg"); if (image.empty()) { cerr << "Fehler beim Laden des Bildes!" << endl; return -1; } cout << "Größe des Originalbildes: " << image.cols << " x " << image.rows << endl; return 0;}

Die Funktion gibt ein Objekt vom Typ Mat (Matrix) zurück. Wenn die Datei nicht gefunden oder beschädigt ist, gibt image.empty() true zurück.



Größenänderung eines Bildes (resize) in C++

Die Funktion resize() in OpenCV ermöglicht es, ein Bild auf beliebige Größen zu skalieren. Sie unterstützt mehrere Interpolationsmethoden, die die Qualität des Ergebnisses beeinflussen.



Syntax von resize

void resize(InputArray src, OutputArray dst, Size dsize,             double fx = 0, double fy = 0, int interpolation = INTER_LINEAR);
  • src — das Quellbild.
  • dst — das resultierende Bild.
  • dsize — die neue Größe (Breite, Höhe). Kann explizit angegeben oder über fx und fy berechnet werden.
  • fx — Skalierungsfaktor für die Breite (wenn dsize = Size()).
  • fy — Skalierungsfaktor für die Höhe.
  • interpolation — die Interpolationsmethode. Die wichtigsten Optionen:
    • INTER_NEAREST — Nächster Nachbar (schnell, aber mit Artefakten).
    • INTER_LINEAR — bilinear (Standard, gute Balance).
    • INTER_CUBIC — bikubisch (langsamer, aber qualitativ hochwertiger).
    • INTER_AREA — wird beim Verkleinern von Bildern verwendet (Pixelbereich).


Beispiel 1: Verkleinern auf eine feste Größe

Mat resized;Size newSize(300, 200); // Breite 300, Höhe 200resize(image, resized, newSize, 0, 0, INTER_AREA);imwrite("resized_fixed.jpg", resized);cout << "Größe nach resize: " << resized.cols << " x " << resized.rows << endl;


Beispiel 2: Skalierung um den Faktor 2 unter Beibehaltung der Proportionen

Mat scaled;resize(image, scaled, Size(), 0.5, 0.5, INTER_LINEAR);imwrite("scaled_half.jpg", scaled);

Wenn dsize = Size() angegeben wird, werden die neuen Größen nach den Formeln berechnet: dsiz

Empfehlungen