1. Productos
  2.   Imagen
  3.   C++
  4.   OpenImageIO
 
  

Procesamiento y conversión de imágenes a través de la API C++ de código abierto

Lea, escriba y convierta formatos de imagen populares como PNG, JPEG, BMP, TIFF y muchos más a través de la biblioteca C++ gratuita.

OpenImageIO es una poderosa biblioteca de procesamiento de imágenes que da a los desarrolladores de software la capacidad de leer, escribir y procesar formatos de archivos de imagen populares dentro de C++ aplicaciones. Proporciona soporte para varios formatos de imagen populares a través de plugins. Ofrece soporte para formatos de imagen populares como OpenEXR, TIFF, JPEG/FF, NG, BMP, JPEG-2000, CO, PM, DP, FF, Field3D, Tex, Photoshop PSD, GIF

La biblioteca OpenImageIO se utiliza ampliamente en estudios de animación y FX en todo el mundo y también se integra en numerosos productos comerciales. OpenImageIO biblioteca viene con varias herramientas de imagen de línea de comandos que demuestran características como la conversión de formatos de imagen a otros, comparando dos imágenes, imprimiendo información detallada, buscando imágenes para metadatos de coincidencia, simple espectador de imagen y más.

Previous Next

Primeros pasos con OpenImageIO

El sistema de compilación OpenImageIO se basa en CMake. Si necesita instalarlo en su sistema. Después de compilar OpenImageIO, si compiló con el indicador EMBEDPLUGINS=0, deberá configurar la variable de entorno OIIO_LIBRARY_PATH para que apunte al directorio 'lib' donde está instalado OpenImageIO o, de lo contrario, no podrá encontrar los complementos.

Instale OpenImageIO a través del comando git

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

Leer y escribir imágenes a través de la API de C++

La biblioteca OpenImageIO permite a los programadores leer y escribir imágenes, así como controlar la forma en que las imágenes posteriores se producirán externamente en la salida. Normalmente, todas las imágenes leídas por la biblioteca se leen en un ImageBuf respaldado por un ImageCache subyacente y se convierten automáticamente en píxeles flotantes para el almacenamiento interno. Mientras escribe imágenes, solo envía la imagen actual al archivo nombrado. La biblioteca de procesamiento de imágenes no elimina la imagen actual de la pila de imágenes; simplemente guarda una copia del mismo.

Lectura de imagen avanzada vía 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;
}

Conversión de imagen a otros formatos

La biblioteca OpenImageIO proporciona funciones para convertir imágenes a otros formatos de archivo populares. Es muy fácil convertir entre formatos de imagen compatibles. La utilidad iconvert leerá una imagen y luego escribirá la imagen en un nuevo formato de archivo compatible. Simplemente deducirá el formato del archivo a partir de la extensión del archivo. Puede incluir un título de imagen, una descripción, palabras clave o metadatos.

Cambiar los metadatos de la imagen a través de C++

OpenImageIO API permite a los desarrolladores de software cambiar la imagen actual metadata dentro de sus propias C++ aplicaciones a través de fuente abierta API. Proporciona comandos que modifican los metadatos de la imagen existente, pero no cambian sus valores de píxel. Lo bueno es que sólo la imagen actual (imagen en la parte superior de la pila) está afectada, pero no en la pila. También puede añadir o claras palabras clave, añadir cautión o descripción, eliminar cualquier metadata, y más.

Cómo configurar la imagen Metadata vía 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

Dibujar hojas o texto sobre imágenes a través de C++ API

Siempre es muy útil etiquetar sus imágenes con títulos útiles o marcar la imagen para protegerlos del uso no autorizado. La biblioteca OpenImageIO ha incluido varias características importantes para dibujar formas, puntos, líneas, cajas o texto sobre las imágenes con facilidad. Puedes dibujar formas sobre tu imagen o añadirle texto con sólo un par de líneas de código. Los siguientes ejemplos de código muestran cómo dibujar texto sobre una imagen y alinearlo.

Cómo dibujar texto sobre la imagen vía 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);
 Español