Açık Kaynak C++ API ile Görüntü İşleme ve Dönüştürme
PNG, JPEG, BMP, TIFF ve çok daha fazlası gibi Popüler Resim Biçimlerini Ücretsiz C++ Kitaplığı aracılığıyla Okuyun, Yazın ve Dönüştürün.
OpenImageIO, yazılım geliştiricilerine C++ uygulama içinde popüler görüntü dosyası formatlarını okuma, yazma ve işleme yeteneği veren güçlü bir görüntü işleme kütüphanesidir. Eklentiler aracılığıyla birkaç popüler görüntü formatı için destek sağlar. OpenEXR, TIFF, JPEG/FF, NG, BMP, JPEG-2000, CO, PM, DP, FF, Field3D, Tex, Photoshop PSD, GIF ve birkaç tane daha.
OpenImageIO kütüphanesi tüm dünyada animasyon ve FX stüdyolarında yaygın olarak kullanılmaktadır ve aynı zamanda çok sayıda ticari ürüne entegre edilmiştir. OpenImageIO kütüphanesi, görüntü formatlarını başkalarına dönüştürmek gibi özellikleri gösteren birkaç komut satırı görüntü araçları ile birlikte gelir, iki görüntüyü karşılaştırır, ayrıntılı bilgileri kullanarak, metadata, basit görüntü görünümörü ve daha fazlası için görüntüler aramaktadır.
OpenImageIO'ya Başlarken
OpenImageIO yapı sistemi, CMake'e dayanmaktadır. Sisteminize yüklemeniz gerekiyorsa. OpenImageIO'yu oluşturduktan sonra, EMBEDPLUGINS=0 bayrağıyla derlediyseniz, OIIO_LIBRARY_PATH ortam değişkenini OpenImageIO'nun kurulu olduğu 'lib' dizinini gösterecek şekilde ayarlamanız gerekir, aksi takdirde eklentileri bulamaz.
OpenImageIO'yu git komutuyla kurun
git clone https://github.com/OpenImageIO/oiio.git
C++ API ile görüntüleri okuma ve yazma
OpenImageIO kitaplığı, programcıların görüntüleri okumasına ve yazmasına ve daha sonraki görüntülerin çıktıda harici olarak üretilme şeklini kontrol etmesine olanak tanır. Normalde, kitaplık tarafından okunan tüm görüntüler, altta yatan bir ImageCache tarafından desteklenen bir ImageBuf'a okunur ve dahili depolama için otomatik olarak kayan piksellere dönüştürülür. Görüntüleri yazarken, mevcut görüntüyü adlandırılmış dosyaya verir. Görüntü işleme kitaplığı, mevcut görüntüyü görüntü yığınından kaldırmaz; sadece bir kopyasını kaydeder.
Gelişmiş Resim Okuması 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;
}
Görüntüyü Diğer Biçimlere Dönüştürme
OpenImageIO kitaplığı, görüntüleri diğer popüler dosya biçimlerine dönüştürmek için özellikler sağlar. Desteklenen görüntü formatları arasında dönüştürmek çok kolaydır. iconvert yardımcı programı bir görüntüyü okuyacak ve ardından görüntüyü desteklenen yeni bir dosya biçimine yazacaktır. Dosya biçimini dosya uzantısından çıkaracaktır. Bir resim başlığı, açıklama, anahtar kelimeler veya meta veriler ekleyebilirsiniz.
Görüntü Meta Verilerini C++ ile Değiştirin
OpenImageIO API, yazılım geliştiricilerinin mevcut görüntü metadata'yı açık kaynak API aracılığıyla değiştirmelerini sağlar. Mevcut görüntünün metadatasını değiştiren komutlar sağlar, ancak piksel değerlerini değiştirmez. İyi olan şey, sadece mevcut görüntünün (paranın üst kısmındaki görüntü) etkilendiğidir, ancak yığının aşağı değil. Ayrıca arama veya açıklama ekleyebilir, herhangi bir metadata'yı ve daha fazlasını çıkarın.
Resim Metadata'yı C++ ile nasıl ayarlar
// 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
Şekilleri veya metinleri C++ API ile
Görüntülerinizi yararlı başlıklarla veya onları yetkisiz kullanımdan korumak için görüntüyü etiketlemek her zaman çok yararlıdır. Açık kaynak OpenImageIO kütüphanesi, çizim şekilleri, puanlar, satırlar, kutular veya resimler için kolaylıkla birkaç önemli özellik içeriyordu. Görüntünüzün üzerinde şekiller çizebilir veya birkaç kodla ona metin ekleyebilirsiniz. Aşağıdaki kod örnekleri, bir görüntü üzerinde metin nasıl çizeceğinizi ve onu hizalayacağını gösteriyor.
Text Over Image Tarafından 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);