Обработка и преобразование изображений через C++ API с открытым исходным кодом

Читайте, записывайте и конвертируйте популярные форматы изображений, такие как PNG, JPEG, BMP, TIFF и многие другие, с помощью бесплатной библиотеки C++.

OpenImageIO — это мощная библиотека обработки изображений, которая дает разработчикам программного обеспечения возможность читать, записывать и обрабатывать популярные форматы файлов изображений в приложениях C++. Он обеспечивает поддержку нескольких популярных форматов изображений через плагины. Он обеспечивает поддержку популярных форматов изображений, таких как OpenEXR, TIFF, JPEG/JFIF, PNG, BMP, JPEG-2000, ICO, PNM, DPX, IFF, Field3D, Ptex, Photoshop PSD, GIF и некоторых других.

Библиотека OpenImageIO широко используется в анимационных и FX-студиях по всему миру, а также интегрирована в многочисленные коммерческие продукты. Библиотека OpenImageIO поставляется с несколькими инструментами командной строки изображений, которые демонстрируют такие функции, как преобразование форматов изображений в другие, сравнение двух изображений, печать подробной информации, поиск изображений для метаданных матчей, простой просмотрщик изображений и многое другое.

Previous Next

Начало работы с OpenImageIO

Система сборки OpenImageIO основана на CMake. Если нужно установить его в вашей системе. После сборки OpenImageIO, если вы скомпилировали его с флагом EMBEDPLUGINS=0, вам нужно будет установить переменную среды OIIO_LIBRARY_PATH, чтобы она указывала на каталог «lib», в котором установлен OpenImageIO, иначе он не сможет найти плагины.

Установите OpenImageIO с помощью команды git

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

Чтение и запись изображений через C++ API

Библиотека OpenImageIO позволяет программистам читать и записывать изображения, а также управлять способом, которым последующие изображения будут создаваться на выходе. Обычно все изображения, считываемые библиотекой, считываются в ImageBuf, поддерживаемый базовым ImageCache, и автоматически преобразуются в плавающие пиксели для внутреннего хранения. При записи изображений он просто выводит текущее изображение в именованный файл. Библиотека обработки изображений не удаляет существующее изображение из стека изображений; он просто сохраняет его копию.

Расширенное чтение изображений через 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;
}

Преобразование изображения в другие форматы

Библиотека OpenImageIO предоставляет функции для преобразования изображений в другие популярные форматы файлов. Очень легко конвертировать среди поддерживаемых форматов изображений. Утилита iconvert прочитает изображение, а затем запишет изображение в новый поддерживаемый формат файла. Он просто выведет формат файла из расширения файла. Вы можете включить подпись к изображению, описание, ключевые слова или метаданные.

Изменить метаданные изображения через C++

OpenImageIO API позволяет разработчикам программного обеспечения изменять текущие метаданные изображения внутри своих C++ приложений с помощью open source API. Он предоставляет команды, которые изменяют метаданные существующего изображения, но не меняют его значения пикселей. Хорошая вещь заключается в том, что только текущее изображение (изображение в верхней части стека) затронуто, но не вниз стек. Вы также можете добавить или очистить ключевые слова, добавить заголовок или описание, удалить любые метаданные и многое другое.

Как установить метаданные изображения через 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

Рисовать формы или текст через изображения C++ API

Всегда очень полезно маркировать свои изображения полезными названиями или водяным знаком для защиты их от несанкционированного использования. Библиотека с открытым исходным кодом OpenImageIO включает в себя несколько важных функций для рисования форм, точек, линий, коробок или текста над изображениями с легкостью. Вы можете нарисовать фигуры над своим изображением или добавить текст к нему всего несколькими строками кода. Следующие примеры кода показывают, как нарисовать текст через изображение и выровнять его.

Как рисовать текст через изображение 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);
 Русский