Vaizdo apdorojimas ir konvertavimas naudojant atvirojo kodo C++ API
Skaitykite, rašykite ir konvertuokite populiarius vaizdo formatus, pvz., PNG, JPEG, BMP, TIFF ir daug daugiau, naudodami nemokamą C++ biblioteką.
OpenImageIO yra galinga vaizdo apdorojimo biblioteka, suteikianti programinės įrangos kūrėjams galimybę skaityti, rašyti ir apdoroti populiarius vaizdo failų formatus C++ programose. Jis palaiko kelis populiarius vaizdo formatus per papildinius. Jis palaiko populiarius vaizdo formatus, tokius kaip OpenEXR, TIFF, JPEG/JFIF, PNG, BMP, JPEG-2000, ICO, PNM, DPX, IFF, Field3D, Ptex, Photoshop PSD, GIF ir dar kelis.
OpenImageIO biblioteka yra plačiai naudojama animacijos ir VFX studijose visame pasaulyje, taip pat yra integruota į daugybę komercinių produktų. „OpenImageIO“ bibliotekoje yra keletas komandinės eilutės vaizdo įrankių, kurie demonstruoja tokias funkcijas kaip vaizdo formatų konvertavimas į kitus, dviejų vaizdų palyginimas, išsamios informacijos spausdinimas, vaizdų atitikties metaduomenų paieška, paprasta vaizdų peržiūros priemonė ir kt.
Darbo su OpenImageIO pradžia
OpenImageIO kūrimo sistema yra pagrįsta CMake. Jei reikia įdiegti ją savo sistemoje. Sukūrę OpenImageIO, jei kompiliavote naudodami žymą EMBEDPLUGINS=0, turėsite nustatyti aplinkos kintamąjį OIIO_LIBRARY_PATH, kad jis nurodytų „lib“ katalogą, kuriame įdiegtas OpenImageIO, kitaip jis negalės rasti papildinių.
Įdiekite OpenImageIO naudodami komandą git
git clone https://github.com/OpenImageIO/oiio.git
Vaizdų skaitymas ir rašymas naudojant C++ API
„OpenImageIO“ biblioteka leidžia programuotojams skaityti ir rašyti vaizdus, taip pat valdyti būdą, kaip vėliau vaizdai bus iš išorės sukurti išvestyje. Paprastai visi bibliotekos nuskaityti vaizdai nuskaitomi į „ImageBuf“, paremtą pagrindine „ImageCache“, ir automatiškai konvertuojami į plūduriuojančius pikselius vidiniam saugojimui. Rašydamas vaizdus, jis tiesiog išveda dabartinį vaizdą į pavadintą failą. Vaizdo apdorojimo biblioteka nepašalina esamo vaizdo iš vaizdų krūvos; tiesiog išsaugoma jo kopija.
Išplėstinis vaizdo skaitymas per 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;
}
Vaizdo konvertavimas į kitus formatus
OpenImageIO bibliotekoje yra funkcijų, skirtų vaizdams konvertuoti į kitus populiarius failų formatus. Tai labai lengva konvertuoti iš palaikomų vaizdo formatų. „Iconvert“ programa nuskaitys vaizdą ir įrašys vaizdą į naują palaikomą failo formatą. Jis tiesiog nustatys failo formatą iš failo plėtinio. Galite įtraukti vaizdo antraštę, aprašą, raktinius žodžius arba metaduomenis.
Keiskite vaizdo metaduomenis naudodami C++
OpenImageIO API leidžia programinės įrangos kūrėjams pakeisti esamus vaizdo metaduomenis savo C++ programose per atvirojo kodo API. Jame pateikiamos komandos, kurios modifikuoja esamo vaizdo metaduomenis, bet nekeičia jo pikselių reikšmių. Gerai tai, kad paveikiamas tik dabartinis vaizdas (vaizdas krūvos viršuje), bet ne žemyn. Taip pat galite pridėti arba išvalyti raktinius žodžius, pridėti antraštę ar aprašą, pašalinti visus metaduomenis ir kt.
Kaip nustatyti vaizdo metaduomenis naudojant 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
Nubrėžkite figūras arba tekstą ant vaizdų naudodami C++ API
Visada labai naudinga pažymėti savo vaizdus naudingais pavadinimais arba pažymėti vaizdą vandens ženklu, kad apsaugotumėte juos nuo neteisėto naudojimo. Atvirojo kodo OpenImageIO bibliotekoje yra keletas svarbių funkcijų, leidžiančių lengvai piešti figūras, taškus, linijas, langelius ar tekstą ant vaizdų. Galite piešti figūras ant vaizdo arba pridėti prie jo tekstą naudodami tik kelias kodo eilutes. Šie kodo pavyzdžiai rodo, kaip piešti tekstą ant vaizdo ir jį sulygiuoti.
Kaip piešti tekstą ant vaizdo naudojant 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);