1. Producten
  2.   Afbeelding
  3.   C++
  4.   OpenImageIO
 
  

Beeldverwerking en conversie via Open Source C++ API

Lees, schrijf en converteer populaire afbeeldingsindelingen zoals PNG, JPEG, BMP, TIFF en nog veel meer via de gratis C++-bibliotheek.

OpenImageIO is een krachtige beeldverwerkingsbibliotheek die softwareontwikkelaars de mogelijkheid geeft om populaire beeldbestandsformaten in C++-toepassingen te lezen, te schrijven en te verwerken. Het biedt ondersteuning voor verschillende populaire afbeeldingsformaten via plug-ins. Het biedt ondersteuning voor populaire beeldformaten zoals OpenEXR, TIFF, JPEG/JFIF, PNG, BMP, JPEG-2000, ICO, PNM, DPX, IFF, Field3D, Ptex, Photoshop PSD, GIF en nog veel meer.

OpenImageIO-bibliotheek wordt veel gebruikt in animatie- en VFX-studio's over de hele wereld en is ook geïntegreerd in tal van commerciële producten. De OpenImageIO-bibliotheek wordt geleverd met verschillende opdrachtregelhulpprogramma's voor afbeeldingen die functies demonstreren zoals het converteren van afbeeldingsindelingen naar andere, het vergelijken van twee afbeeldingen, het afdrukken van gedetailleerde informatie, het zoeken naar afbeeldingen naar metagegevens van de overeenkomst, een eenvoudige afbeeldingsviewer en meer.

Previous Next

Aan de slag met OpenImageIO

Het OpenImageIO-bouwsysteem is gebaseerd op CMake. Indien nodig om het op uw systeem te installeren. Nadat je OpenImageIO hebt gebouwd en je hebt gecompileerd met de vlag EMBEDPLUGINS=0, moet je de omgevingsvariabele OIIO_LIBRARY_PATH zo instellen dat deze verwijst naar de map 'lib' waar OpenImageIO is geïnstalleerd, anders kan het de plug-ins niet vinden.

Installeer OpenImageIO via het git-commando

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

Afbeeldingen lezen en schrijven via C++ API

Met de OpenImageIO-bibliotheek kunnen programmeurs afbeeldingen lezen en schrijven en bepalen hoe latere afbeeldingen extern in de uitvoer worden geproduceerd. Normaal gesproken worden alle afbeeldingen die door de bibliotheek worden gelezen, ingelezen in een ImageBuf die wordt ondersteund door een onderliggende ImageCache, en automatisch geconverteerd naar zwevende pixels voor interne opslag. Tijdens het schrijven van afbeeldingen voert het alleen de huidige afbeelding uit naar het genoemde bestand. De beeldverwerkingsbibliotheek verwijdert het huidige beeld niet uit de beeldstapel; het slaat er gewoon een kopie van op.

Vertaling:

#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;
}

Afbeelding converteren naar andere indelingen

OpenImageIO-bibliotheek biedt functies voor het converteren van afbeeldingen naar andere populaire bestandsindelingen. Het is heel eenvoudig om te converteren tussen ondersteunde afbeeldingsformaten. Het hulpprogramma iconvert leest een afbeelding en schrijft de afbeelding vervolgens naar een nieuwe ondersteunde bestandsindeling. Het zal eenvoudig het bestandsformaat afleiden uit de bestandsextensie. U kunt een afbeeldingsbijschrift, beschrijving, trefwoorden of metagegevens opnemen.

Wijzig afbeeldingsmetagegevens via C++

OpenImageIO API stelt softwareontwikkelaars in staat om de huidige metadata van afbeeldingen in hun eigen C++-applicaties te wijzigen via open source API. Het biedt opdrachten die de metadata van de bestaande afbeelding wijzigen, maar de pixelwaarden niet wijzigen. Het goede ding is dat alleen de huidige afbeelding (afbeelding bovenaan de stapel) wordt beïnvloed, maar niet onderaan de stapel. U kunt ook trefwoorden toevoegen of wissen, een bijschrift of beschrijving toevoegen, metadata verwijderen en meer.

Hoe je Image Metadata onder 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

Draw Shapes of Text over Images via C++API

Het is altijd erg nuttig om je beelden te labelen met nuttige titels of watermarkering om ze te beschermen tegen onbevoegd gebruik. De open bron van de openheidsbibliotheek bevat een aantal belangrijke kenmerken voor het tekenen van vormen, punten, lijnen, dozen of sms'en over de beelden met gemak. Je kunt vormen trekken over je imago of er een sms op zetten met slechts een paar codes. De volgende codevoorbeelden laten zien hoe je een bericht moet tekenen over een afbeelding en het opsporen.

Hoe te Draw Text Over Image via 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);
 Dutch