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.
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);