1. Produkte
  2.   Bild
  3.   C++
  4.   OpenImageIO
 
  

Bildverarbeitung und -konvertierung über Open Source C++ API

Lesen, schreiben und konvertieren Sie beliebte Bildformate wie PNG, JPEG, BMP, TIFF und viele mehr über die kostenlose C++-Bibliothek.

OpenImageIO ist eine leistungsstarke Bibliothek zur Bildverarbeitung, die Software-Entwicklern die Möglichkeit gibt, populäre Bilddateiformate in C++ Anwendungen zu lesen, zu schreiben und zu verarbeiten. Es bietet Unterstützung für verschiedene gängige Bildformate durch Plugins. Es unterstützt gängige Bildformate wie OpenEXR, TIFF, JPEG/FF, NG, BMP, JPEG-2000, CO, PM, DP, FF, Field3D, Tex, Photoshop PSD, Photoshop.

OpenImageIO Bibliothek wird weltweit in Animations- und FX-Studios eingesetzt und ist auch in zahlreiche kommerzielle Produkte integriert. OpenImageIO-Bibliothek enthält mehrere Kommandozeilen-Bildwerkzeuge, die Funktionen wie das Konvertieren von Bildformaten zu anderen zeigen, zwei Bilder vergleichen, detaillierte Informationen drucken, Bilder nach passenden Metadaten suchen, einfache Bildbetrachter usw.

Previous Next

Erste Schritte mit OpenImageIO

Das OpenImageIO-Buildsystem basiert auf CMake. Wenn Sie es auf Ihrem System installieren müssen. Wenn Sie nach dem Erstellen von OpenImageIO mit dem Flag EMBEDPLUGINS=0 kompiliert haben, müssen Sie die Umgebungsvariable OIIO_LIBRARY_PATH so einstellen, dass sie auf das Verzeichnis „lib“ zeigt, in dem OpenImageIO installiert ist, sonst kann es die Plugins nicht finden.

Installieren Sie OpenImageIO über den Git-Befehl

 git clone https://github.com/OpenImageIO/oiio.git 

Lesen und Schreiben von Bildern über die C++-API

Die OpenImageIO-Bibliothek ermöglicht es Programmierern, Bilder zu lesen und zu schreiben sowie die Art und Weise zu steuern, wie spätere Bilder extern in der Ausgabe erzeugt werden. Normalerweise werden alle von der Bibliothek gelesenen Bilder in einen ImageBuf eingelesen, der von einem zugrunde liegenden ImageCache unterstützt wird, und werden automatisch in Float-Pixel für die interne Speicherung konvertiert. Beim Schreiben von Bildern wird nur das aktuelle Bild in die benannte Datei ausgegeben. Die Bildverarbeitungsbibliothek entfernt das aktuelle Bild nicht aus dem Bildstapel; es speichert einfach eine Kopie davon.

Advanced Image Reading via C++ API

#include 
using namespace OIIO;
...
const char *filename = "foo.jpg";
auto inp = ImageInput::open (filename);
if (! inp) {
    std::cerr << "Could not open " << filename
              << ", error = " << OIIO::geterror() << "\n";
    return;
}
const ImageSpec &spec = inp->spec();
int xres = spec.width;
int yres = spec.height;
int channels = spec.nchannels;
std::vector pixels(xres * yres * channels);
if (! inp->read_image (TypeDesc::UINT8, &pixels[0])) {
    std::cerr << "Could not read pixels from " << filename
              << ", error = " << inp->geterror() << "\n";
    return;
}
if (! inp->close ()) {
    std::cerr << "Error closing " << filename
              << ", error = " << inp->geterror() << "\n";
    return;
}

Konvertieren von Bildern in andere Formate

Die OpenImageIO-Bibliothek bietet Funktionen zum Konvertieren von Bildern in andere gängige Dateiformate. Es ist sehr einfach, zwischen unterstützten Bildformaten zu konvertieren. Das Dienstprogramm iconvert liest ein Bild und schreibt das Bild dann in ein neues unterstütztes Dateiformat. Das Dateiformat wird einfach aus der Dateierweiterung abgeleitet. Sie können eine Bildunterschrift, Beschreibung, Schlüsselwörter oder Metadaten hinzufügen.

Bildmetadaten über C++ ändern

OpenImageIO API ermöglicht Software-Entwicklern, die aktuellen Metadaten von Bildern innerhalb ihrer eigenen C++ Anwendungen über Open Source API zu ändern. Es stellt Befehle zur Verfügung, die die Metadaten des vorhandenen Bildes modifizieren, aber seine Pixelwerte nicht ändern. Das Gute daran ist, dass nur das aktuelle Bild (das Bild oben am Stapel) betroffen ist, aber nicht den Stapel herunter. Sie können auch Schlüsselwörter hinzufügen oder löschen, Titel oder Beschreibung hinzufügen, Metadaten entfernen und vieles mehr.

Wie Bild-Metadaten eingestellt werden können über C++

// spec["key"] = value  sets the value of the metadata, using
// the type of value as a guide for the type of the metadata.
spec["Orientation"] = 1;   // int
spec["PixelAspectRatio"] = 1.0f;   // float
spec["ImageDescription"] = "selfie";  // string
spec["worldtocamera"] = Imath::M44f(...)  // matrix

Zeichnen Sie Shapes oder Text über Bilder über C++ API

Es ist immer sehr nützlich, Ihre Bilder mit nützlichen Titeln oder Wasserzeichen zu versehen, um sie vor unbefugtem Gebrauch zu schützen. Die Open-Source-OpenImageIO-Bibliothek enthält einige wichtige Funktionen, um mit Leichtigkeit Formen, Punkte, Zeilen, Kästchen oder Text über die Bilder zu zeichnen. Sie können Formen über das Bild zeichnen oder Text mit nur wenigen Codezeilen hinzufügen. Die folgenden Codebeispiele zeigen, wie man Text über ein Bild zeichnen und ausrichten kann.

Wie Text über Bild zeichnen über C++ API

ImageBufAlgo::render_text (ImgA, 50, 100, "Hello, world");
float red[] = { 1, 0, 0, 1 };
ImageBufAlgo::render_text (ImgA, 100, 200, "Go Big Red!",
                           60, "Arial Bold", red);
float white[] = { 1, 1, 1, 1 };
ImageBufAlgo::render_text (ImgB, 320, 240, "Centered",
                           60, "Arial Bold", white,
                           TextAlignX::Center, TextAlignY::Center);
 Deutsch