Trabajo con imágenes en C++: bibliotecas CImg y STB Image

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Trabajo con imágenes en C++: bibliotecas CImg y STB Image

El procesamiento de imágenes es una de las tareas clave en gráficos por computadora, visión artificial y tecnologías web. C++ no tiene herramientas integradas para trabajar con imágenes rasterizadas, pero existen muchas bibliotecas de terceros. En este artículo, veremos dos bibliotecas populares y fáciles de usar: CImg (para procesamiento de alto nivel) y STB Image (para carga/guardado rápido de formatos populares).



1. CImg: biblioteca universal para procesamiento de imágenes

CImg (C++ Template Image Processing Library) es una biblioteca de solo encabezado (header-only) que proporciona un amplio conjunto de funciones para cargar, mostrar, filtrar y analizar imágenes. Admite formatos BMP, JPEG, PNG, TIFF y otros (con bibliotecas adicionales como libpng, libjpeg).



Instalación y configuración

Descargue la última versión desde el sitio oficial. Luego, simplemente incluya el archivo de encabezado:

#include "CImg.h"using namespace cimg_library;


Operaciones básicas con CImg

Veamos la carga, cambio de tamaño y aplicación del filtro Gaussiano:

#include "CImg.h"#include <iostream>

int main() { // Cargar imagen (admite BMP, JPG, PNG, etc.) CImg<unsigned char> img("input.jpg"); // Cambiar tamaño a 400x300 CImg<unsigned char> resized = img.resize(400, 300); // Aplicar desenfoque Gaussiano (radio 3) CImg<unsigned char> blurred = resized.get_blur(3.0f); // Guardar resultado blurred.save("output.jpg"); std::cout << "¡Imagen procesada!" << std::endl; return 0;}


Funcionalidades adicionales de CImg

  • Filtros: desenfoque, aumento de nitidez, filtro mediano, operaciones morfológicas.
  • Transformaciones de color: conversión a escala de grises, HSV, Lab.
  • Histograma: construcción y ecualización.
  • Dibujo: líneas, círculos, texto sobre la imagen.
  • Visualización: ventana integrada para previsualización (requiere X11 en Linux o WinAPI en Windows).


2. STB Image: carga y guardado rápidos

STB Image es un conjunto de bibliotecas de un solo encabezado de Sean Barrett, diseñadas para leer/escribir imágenes en formatos PNG, JPG, BMP, GIF y otros. La principal ventaja es el minimalismo y la velocidad. No requiere instalación, solo incluya los archivos stb_image.h y stb_image_write.h.



Configuración

Descargue los archivos desde GitHub. Para usar, defina la macro STB_IMAGE_IMPLEMENTATION exactamente en un archivo .cpp:

#define STB_IMAGE_IMPLEMENTATION#include "stb_image.h"

#define STB_IMAGE_WRITE_IMPLEMENTATION#include "stb_image_write.h"


Ejemplo: cargar PNG y guardar en JPG

#include <iostream>

#define STB_IMAGE_IMPLEMENTATION#include "stb_image.h"#define STB_IMAGE_WRITE_IMPLEMENTATION#include "stb_image_write.h"

int main() { int width, height, channels; // Cargar imagen (devuelve un arreglo de píxeles en formato RGB/RGBA) unsigned char* img = stbi_load("input.png", &width, &height, &channels, 3); if (!img) { std::cerr << "¡Error al cargar la imagen!" << std::endl; return -1; } // Guardar como JPEG con calidad 90 stbi_write_jpg("output.jpg", width, height, 3, img, 90); // Liberar memoria stbi_image_free(img); std::cout << "¡Conversión completada!" << std::endl; return 0;

Recommendations