1. Termékek
  2.   Kép
  3.   C++
  4.   OpenImageIO
 
  

Képfeldolgozás és -konverzió nyílt forráskódú C++ API-n keresztül

Olvasson, írjon és konvertáljon népszerű képformátumokat, például PNG, JPEG, BMP, TIFF és még sok mást az ingyenes C++ könyvtáron keresztül.

Az OpenImageIO egy hatékony képfeldolgozó könyvtár, amely lehetővé teszi a szoftverfejlesztők számára a népszerű képfájlformátumok olvasását, írását és feldolgozását C++ alkalmazásokon belül. Számos népszerű képformátum támogatását biztosítja bővítményeken keresztül. Támogatja az olyan népszerű képformátumokat, mint az OpenEXR, TIFF, JPEG/JFIF, PNG, BMP, JPEG-2000, ICO, PNM, DPX, IFF, Field3D, Ptex, Photoshop PSD, GIF és még sok más.

Az OpenImageIO könyvtárat széles körben használják animációs és VFX stúdiókban világszerte, és számos kereskedelmi termékbe is beépítik. Az OpenImageIO könyvtár számos parancssori képeszközzel rendelkezik, amelyek olyan funkciókat mutatnak be, mint a képformátumok konvertálása más formátumokba, két kép összehasonlítása, részletes információk nyomtatása, képek keresése egyezési metaadatok után, egyszerű képnézegető stb.

Previous Next

Az OpenImageIO használatának első lépései

Az OpenImageIO build rendszer a CMake-en alapul. Ha telepítenie kell a rendszerére. Az OpenImageIO összeállítása után, ha az EMBEDPLUGINS=0 jelzővel fordította le, be kell állítania az OIIO_LIBRARY_PATH környezeti változót, hogy arra a „lib” könyvtárra mutasson, ahol az OpenImageIO telepítve van, különben nem fogja megtalálni a beépülő modulokat.

Telepítse az OpenImageIO-t a git paranccsal

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

Képek olvasása és írása C++ API-n keresztül

Az OpenImageIO könyvtár lehetővé teszi a programozók számára, hogy képeket olvassanak és írhassanak, valamint szabályozzák a későbbi képek külső előállítási módját a kimenetben. Normális esetben a könyvtár által beolvasott összes kép beolvasásra kerül egy ImageBuf-ba, amelyet egy mögöttes ImageCache támogat, és automatikusan lebegő képpontokká alakítják át belső tárolás céljából. A képek írása közben csak az aktuális képet adja ki a megnevezett fájlba. A képfeldolgozó könyvtár nem távolítja el a jelenlegi képet a képveremből; egyszerűen elment egy másolatot róla.

Fejlett képolvasás 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;
}

Kép konvertálása más formátumba

Az OpenImageIO könyvtár szolgáltatásokat nyújt a képek más népszerű fájlformátumokká konvertálásához. Nagyon könnyen konvertálható a támogatott képformátumok közé. Az iconvert segédprogram beolvas egy képet, majd egy új támogatott fájlformátumba írja a képet. Egyszerűen kikövetkezteti a fájlformátumot a fájlkiterjesztésből. Megadhat képaláírást, leírást, kulcsszavakat vagy metaadatokat.

Módosítsa a kép metaadatait a C++ segítségével

Az OpenImageIO API lehetővé teszi a szoftverfejlesztők számára, hogy a nyílt forráskódú API-n keresztül módosítsák az aktuális kép metaadatokat saját C++ alkalmazásaikon belül. Olyan parancsokat biztosít, amelyek módosítják a meglévő kép metaadatait, de nem változtatják meg a képpont értékeit. A jó dolog az, hogy csak az aktuális kép (a verem tetején lévő kép) van hatással, de a verem lefelé nem. Kulcsszavakat is hozzáadhat vagy törölhet, feliratot vagy leírást adhat hozzá, eltávolíthatja a metaadatokat stb.

Hogyan állítsuk be a Metadata képet C++-en keresztül

// 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 vagy Text Over Images keresztül C++ API

Mindig nagyon hasznos, hogy a képeket hasznos címekkel jelölje ki, vagy vízjelezze a képet, hogy megvédje őket a nem engedélyezett használattól. A nyílt forráskódú OpenImageIO könyvtár számos fontos jellemzőt tartalmazott a formák, pontok, vonalak, dobozok vagy szövegek rajzolására a képek könnyedén. Alakokat rajzolhat a képen, vagy szöveget adhat hozzá csak néhány sor kóddal. A következő kódpéldák azt mutatják, hogyan lehet szöveget rajzolni egy képen, és összehangolni.

Hogyan húzzuk át a képet 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);
 Magyar