1. Produse
  2.   Imagine
  3.   C++
  4.   OpenImageIO
 
  

Procesarea și conversia imaginilor prin API-ul Open Source C++

Citiți, scrieți și convertiți formate de imagine populare, cum ar fi PNG, JPEG, BMP, TIFF și multe altele prin Biblioteca C++ gratuită.

OpenImageIO este o bibliotecă puternică de procesare a imaginilor care oferă dezvoltatorilor de software capacitatea de a citi, scrie și procesa formate populare de fișiere de imagine în cadrul aplicațiilor C++. Oferă suport pentru mai multe formate de imagine populare prin pluginuri. Oferă suport pentru formate de imagine populare precum OpenEXR, TIFF, JPEG/JFIF, PNG, BMP, JPEG-2000, ICO, PNM, DPX, IFF, Field3D, Ptex, Photoshop PSD, GIF și multe altele.

Biblioteca OpenImageIO este utilizată pe scară largă în studiourile de animație și VFX din întreaga lume și este, de asemenea, integrată în numeroase produse comerciale. Biblioteca OpenImageIO vine cu mai multe instrumente de imagine din linia de comandă care demonstrează caracteristici precum conversia formatelor de imagine în altele, compararea a două imagini, imprimarea informațiilor detaliate, căutarea imaginilor pentru metadate de potrivire, vizualizator de imagini simplu și multe altele.

Previous Next

Noțiuni introductive cu OpenImageIO

Sistemul de construire OpenImageIO se bazează pe CMake. Dacă trebuie să îl instalați pe sistemul dvs. După ce ați construit OpenImageIO, dacă ați compilat cu indicatorul EMBEDPLUGINS=0, va trebui să setați variabila de mediu OIIO_LIBRARY_PATH să indice directorul „lib” în care este instalat OpenImageIO, altfel nu va putea găsi pluginurile.

Instalați OpenImageIO prin comanda git

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

Citirea și scrierea imaginilor prin API-ul C++

Biblioteca OpenImageIO permite programatorilor să citească și să scrie imagini, precum și să controleze modul în care imaginile ulterioare vor fi produse extern în ieșire. În mod normal, toate imaginile citite de bibliotecă sunt citite într-un ImageBuf susținut de un ImageCache subiacent și sunt convertite automat în pixeli flotanți pentru stocare internă. În timpul scrierii imaginilor, pur și simplu scoate imaginea curentă în fișierul numit. Biblioteca de procesare a imaginii nu elimină imaginea prezentă din stiva de imagini; pur și simplu salvează o copie a acestuia.

Sursă foto: 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;
}

Conversia imaginii în alte formate

Biblioteca OpenImageIO oferă funcții pentru conversia imaginilor în alte formate de fișiere populare. Este foarte ușor să convertiți între formatele de imagine acceptate. Utilitarul iconvert va citi o imagine și apoi va scrie imaginea într-un nou format de fișier acceptat. Pur și simplu va deduce formatul fișierului din extensia fișierului. Puteți include o legendă a unei imagini, o descriere, cuvinte cheie sau metadate.

Schimbați metadatele imaginii prin C++

OpenImageIO API le permite dezvoltatorilor de software să modifice metadatele actuale ale imaginii în propriile aplicații C++ prin intermediul API-ului open source. Oferă comenzi care modifică metadatele imaginii existente, dar nu modifică valorile pixelilor acesteia. Lucrul bun este că doar imaginea curentă (imaginea din partea de sus a stivei) este afectată, dar nu în josul stivei. De asemenea, puteți să adăugați sau să ștergeți cuvinte cheie, să adăugați legenda sau descriere, să eliminați orice metadate și multe altele.

Cum să setați metadate de imagine prin 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 sau Text peste imagini prin C++ API

Este întotdeauna foarte util să etichetați imaginile cu titluri utile sau să marcați imaginea pentru a le proteja de utilizarea neautorizată. Biblioteca OpenImageIO a inclus mai multe caracteristici importante pentru desenarea cu ușurință a formelor, punctelor, liniilor, cutiilor sau textului. Puteți desena forme peste imaginea dvs. sau puteți adăuga text la ea cu doar câteva linii de cod. Următoarele exemple de coduri arată cum să tragi un text peste o imagine și să îl aliniezi.

Cum să desenați textul peste imagine prin 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);
 Română