Arbeiten mit Bildern in C++: Überblick über Bibliotheken und praktische Beispiele
Bildverarbeitung ist eine der zentralen Aufgaben in der modernen Programmierung, von Computer Vision bis hin zu Grafikeditoren. In C++ gibt es mehrere leistungsstarke Bibliotheken, mit denen Bilder geladen, verarbeitet und gespeichert werden können. In diesem Artikel betrachten wir drei beliebte Werkzeuge: CImg, OpenCV und stb_image. Jede von ihnen hat ihre eigenen Besonderheiten, Vorteile und Anwendungsbereiche.
1. Die Bibliothek CImg
CImg (C++ Image Processing Library) ist eine leichtgewichtige, plattformübergreifende Bibliothek zur Bildverarbeitung. Sie wird als einzelne Header-Datei (CImg.h) vertrieben, was sie ideal für schnelles Prototyping und kleinere Projekte macht. CImg unterstützt die Formate BMP, JPEG, PNG, TIFF und andere, benötigt aber für deren Nutzung die Installation zusätzlicher Bibliotheken (z. B. libpng oder libjpeg).
Hauptfunktionen:
- Laden, Anzeigen und Speichern von Bildern.
- Filter (Weichzeichner, Schärfung, Medianfilter).
- Geometrische Transformationen (Drehung, Skalierung, Spiegelung).
- Arbeiten mit Farbräumen (RGB, HSV, Lab).
- Zeichnen von Primitiven (Linien, Kreise, Text).
Beispiel: Bild laden und Weichzeichnung anwenden
#include "CImg.h"using namespace cimg_library;
int main() { // Bild laden CImg<unsigned char> image("input.jpg");
// Gaußschen Weichzeichner anwenden (Radius 3) CImg<unsigned char> blurred = image.get_blur(3);
// Ergebnis speichern blurred.save("output_blurred.jpg");
return 0;}Dieser Code demonstriert den minimalistischen Ansatz von CImg: eine Zeile zum Laden, eine zur Verarbeitung und eine zum Speichern. Die Bibliothek verwaltet den Speicher automatisch.
2. Die Bibliothek OpenCV
OpenCV (Open Source Computer Vision Library) ist der De-facto-Standard für Aufgaben des maschinellen Sehens und der Bildverarbeitung in C++. Sie umfasst über 2500 optimierte Algorithmen, unterstützt GPU-Beschleunigung und wird aktiv in industriellen Lösungen, Robotik und wissenschaftlicher Forschung eingesetzt. OpenCV arbeitet mit den Formaten JPEG, PNG, TIFF, WebP und vielen anderen.
Hauptfunktionen:
- Laden, Anzeigen und Aufzeichnen von Video/Bildern.
- Filterung, Morphologie, Schwellwertverarbeitung.
- Objekterkennung (Gesichter, Autos) mittels Haar-Kaskaden oder Deep Learning.
- Kamerakalibrierung, Stereosehen.
- Maschinelles Lernen (SVM, KNN, neuronale Netze).
Beispiel: Größenänderung und Umwandlung in Graustufen
#include <opencv2/opencv.hpp>using namespace cv;
int main() { // Farbbild laden Mat image = imread("input.jpg", IMREAD_COLOR); if (image.empty()) { return -1; }
// In Graustufen umwandeln Mat gray; cvtColor(image, gray, COLOR_BGR2GRAY);
// Größe um die Hälfte reduzieren Mat resized; resize(gray, resized, Size(), 0.5, 0.5, INTER_LINEAR);
// Ergebnis speichern imwrite("output_gray_resized.jpg", resized);
return 0;}OpenCV verwendet die Klasse Mat zur Darstellung von Bildern. Alle Operationen werden über statische Funktionen oder Methoden ausgeführt. Die Bibliothek erfordert eine vorherige Installation, bietet aber maximale Flexibilität und Leistung.
3. Die Bibliothek stb_image
stb_image ist Teil einer Sammlung von Single-Header-Bibliotheken von Sean Barrett. Sie ist ausschließlich zum Laden und Speichern von Bildern gedacht, ohne Verarbeitungsfunktionen. Unterstützt die Formate JPEG, PNG, BMP, GIF, PS
Auch in der Bibliothek
Kryptografie in TypeScript: Überblick über die Bibliothek crypto-js
GraphQL für Kotlin: Leistungsstarke Bibliotheken zur API-Erstellung
image für Rust: Komplettleitfaden mit Beispielen
Arbeit mit CSV in TypeScript: Bibliotheken, Parsing und Datengenerierung