Elaborazione e conversione delle immagini tramite API C++ open source
Leggi, scrivi e converti i formati immagine più diffusi come PNG, JPEG, BMP, TIFF e molti altri tramite la libreria C++ gratuita.
OpenImageIO è una potente libreria di elaborazione di immagini che dà agli sviluppatori di software la capacità di leggere, scrivere e processare i formati di file di immagine popolari all'interno C++ applicazioni. Fornisce supporto per diversi formati di immagine popolari attraverso plugin. Fornisce supporto per i formati di immagine popolari come OpenEXR, TIFF, JPEG/FF, NG, BMP, JPEG-2000, CO, PM, DP, FF, Field3D, Tex, Photoshop PSD, GIF e molti altri.
OpenImageIO biblioteca è ampiamente utilizzato in animazione e studi FX in tutto il mondo ed è anche integrato in numerosi prodotti commerciali. La libreria OpenImageIO è dotata di diversi strumenti di immagine a riga di comando che dimostrano caratteristiche come convertire formati di immagine ad altri, confrontando due immagini, stampando informazioni dettagliate, cercando immagini per metadati di corrispondenza, visualizzatore di immagine semplice e altro.
Introduzione a OpenImageIO
Il sistema di compilazione OpenImageIO è basato su CMake. Se necessario installarlo sul tuo sistema. Dopo aver compilato OpenImageIO, se hai compilato con il flag EMBEDPLUGINS=0 dovrai impostare la variabile di ambiente OIIO_LIBRARY_PATH in modo che punti alla directory 'lib' in cui è installato OpenImageIO, altrimenti non sarà in grado di trovare i plugin.
Installa OpenImageIO tramite il comando git
git clone https://github.com/OpenImageIO/oiio.git
Lettura e scrittura di immagini tramite API C++
La libreria OpenImageIO consente ai programmatori di leggere e scrivere immagini e di controllare il modo in cui le immagini successive verranno prodotte esternamente nell'output. Normalmente, tutte le immagini lette dalla libreria vengono lette in un ImageBuf supportato da un ImageCache sottostante e vengono automaticamente convertite in pixel mobili per l'archiviazione interna. Durante la scrittura delle immagini, emette semplicemente l'immagine corrente nel file denominato. La libreria di elaborazione delle immagini non rimuove l'immagine attuale dallo stack di immagini; ne salva semplicemente una copia.
Lettura di immagini avanzata via 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;
}
Conversione di immagini in altri formati
La libreria OpenImageIO fornisce funzionalità per convertire le immagini in altri formati di file popolari. È molto facile convertire tra i formati di immagine supportati. L'utilità iconvert leggerà un'immagine e quindi scriverà l'immagine in un nuovo formato di file supportato. Dedurrà semplicemente il formato del file dall'estensione del file. Puoi includere una didascalia dell'immagine, una descrizione, parole chiave o metadati.
Modifica i metadati delle immagini tramite C++
OpenImageIO API consente agli sviluppatori di software di modificare i metadati delle immagini attuali all'interno delle proprie C++ applicazioni tramite open source API. Fornisce comandi che modificano i metadati dell'immagine esistente, ma non modificano i suoi valori pixel. La cosa buona è che solo l'immagine attuale (immagine in cima alla pila) è influenzata, ma non giù lo stack. È inoltre possibile aggiungere o cancellare parole chiave, aggiungere didascalia o descrizione, Rimuovere qualsiasi metadata, e altro ancora.
Come impostare i metadati immagine via 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
Disegnare forme o testo sopra Immagini via C++ API
È sempre molto utile etichettare le immagini con titoli utili o filigrana l'immagine per proteggerle da un uso non autorizzato. La libreria OpenImageIO open source ha incluso diverse caratteristiche importanti per disegnare forme, punti, linee, scatole o testo sulle immagini con facilità. È possibile disegnare forme sopra la tua immagine o aggiungere testo con solo un paio di linee di codice. I seguenti esempi di codice mostrano come disegnare il testo su un'immagine e allinearlo.
Come disegnare il testo su immagine 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);