Arbeiten mit Bildern in C++: Die Bibliotheken CImg und STB Image

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 in C++: die Bibliotheken CImg und STB Image

Bildverarbeitung ist eine der zentralen Aufgaben in Computergrafik, Computer Vision und Webtechnologien. In C++ gibt es keine integrierten Mittel für die Arbeit mit Rasterbildern, aber es gibt zahlreiche externe Bibliotheken. In diesem Artikel betrachten wir zwei beliebte und einfach zu verwendende Bibliotheken: CImg (für die High-Level-Verarbeitung) und STB Image (für das schnelle Laden/Speichern gängiger Formate).



1. CImg: Universelle Bibliothek für Bildverarbeitung

CImg (C++ Template Image Processing Library) ist eine Header-Only-Bibliothek, die eine breite Palette von Funktionen zum Laden, Anzeigen, Filtern und Analysieren von Bildern bietet. Sie unterstützt die Formate BMP, JPEG, PNG, TIFF und andere (mit zusätzlichen Bibliotheken wie libpng, libjpeg).



Installation und Einbindung

Laden Sie die neueste Version von der offiziellen Website herunter. Binden Sie dann einfach die Header-Datei ein:

#include "CImg.h"using namespace cimg_library;


Grundlegende Operationen mit CImg

Betrachten wir das Laden, die Größenänderung und die Anwendung eines Gauß-Filters:

#include "CImg.h"#include <iostream>

int main() { // Bild laden (unterstützt BMP, JPG, PNG usw.) CImg<unsigned char> img("input.jpg"); // Größe auf 400x300 ändern CImg<unsigned char> resized = img.resize(400, 300); // Gaußsche Unschärfe anwenden (Radius 3) CImg<unsigned char> blurred = resized.get_blur(3.0f); // Ergebnis speichern blurred.save("output.jpg"); std::cout << "Bild verarbeitet!" << std::endl; return 0;}


Zusätzliche Funktionen von CImg

  • Filter: Unschärfe, Schärfung, Medianfilter, morphologische Operationen.
  • Farbtransformationen: Umwandlung in Graustufen, HSV, Lab.
  • Histogramm: Erstellung und Entzerrung.
  • Zeichnen: Linien, Kreise, Text auf dem Bild.
  • Anzeige: Integriertes Fenster zur Ansicht (erfordert X11 unter Linux oder WinAPI unter Windows).


2. STB Image: Schnelles Laden und Speichern

STB Image ist eine Sammlung von Single-Header-Bibliotheken von Sean Barrett zum Lesen/Schreiben von Bildern in den Formaten PNG, JPG, BMP, GIF und anderen. Der Hauptvorteil ist Minimalismus und Geschwindigkeit. Keine Installation erforderlich, fügen Sie einfach die Dateien stb_image.h und stb_image_write.h ein.



Einbindung

Laden Sie die Dateien von GitHub herunter. Definieren Sie für die Verwendung das Makro STB_IMAGE_IMPLEMENTATION in genau einer .cpp-Datei:

#define STB_IMAGE_IMPLEMENTATION#include "stb_image.h"

#define STB_IMAGE_WRITE_IMPLEMENTATION#include "stb_image_write.h"


Beispiel: PNG laden und als JPG speichern

#include <iostream>

#define STB_IMAGE_IMPLEMENTATION#include "stb_image.h"#define STB_IMAGE_WRITE_IMPLEMENTATION#include "stb_image_write.h"

int main() { int width, height, channels; // Bild laden (gibt ein Pixel-Array im RGB/RGBA-Format zurück) unsigned char* img = stbi_load("input.png", &width, &height, &channels, 3); if (!img) { std::cerr << "Fehler beim Laden des Bildes!" << std::endl; return -1; } // Als JPEG mit Qualität 90 speichern stbi_write_jpg("output.jpg", width, height, 3, img, 90); // Speicher freigeben stbi_image_free(img); std::cout << "Konvertierung abgeschlossen!" << std::endl; return 0;

Empfehlungen