Procesamiento de imágenes en C++: bibliotecas CImg, OpenCV 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++: revisión de bibliotecas y ejemplos prácticos



El procesamiento de imágenes es una de las tareas clave en la programación moderna, desde la visión por computadora hasta los editores gráficos. En C++ existen varias bibliotecas potentes que permiten cargar, procesar y guardar imágenes. En este artículo analizaremos tres herramientas populares: CImg, OpenCV y stb_image. Cada una tiene sus propias características, ventajas y áreas de aplicación.



1. Biblioteca CImg



CImg (C++ Image Processing Library) es una biblioteca ligera y multiplataforma para el procesamiento de imágenes. Se distribuye como un único archivo de cabecera (CImg.h), lo que la hace ideal para prototipado rápido y proyectos pequeños. CImg admite formatos BMP, JPEG, PNG, TIFF y otros, pero para trabajar con ellos requiere la instalación de bibliotecas adicionales (por ejemplo, libpng o libjpeg).



Características principales:

  • Carga, visualización y guardado de imágenes.
  • Filtros (desenfoque, nitidez, filtro mediano).
  • Transformaciones geométricas (rotación, escalado, reflexión).
  • Trabajo con espacios de color (RGB, HSV, Lab).
  • Dibujo de primitivas (líneas, círculos, texto).


Ejemplo: cargar una imagen y aplicar desenfoque



#include "CImg.h"using namespace cimg_library;

int main() { // Cargamos la imagen CImg<unsigned char> image("input.jpg");

// Aplicamos desenfoque gaussiano (radio 3) CImg<unsigned char> blurred = image.get_blur(3);

// Guardamos el resultado blurred.save("output_blurred.jpg");

return 0;}


Este código demuestra el enfoque minimalista de CImg: una línea para cargar, una para procesar y una para guardar. La biblioteca gestiona la memoria automáticamente.



2. Biblioteca OpenCV



OpenCV (Open Source Computer Vision Library) es el estándar de facto para tareas de visión por computadora y procesamiento de imágenes en C++. Incluye más de 2500 algoritmos optimizados, admite aceleración por GPU y se utiliza activamente en soluciones industriales, robótica e investigación científica. OpenCV trabaja con formatos JPEG, PNG, TIFF, WebP y muchos otros.



Características principales:

  • Carga, visualización y grabación de video/imágenes.
  • Filtrado, morfología, procesamiento por umbral.
  • Detección de objetos (rostros, automóviles) mediante cascadas Haar o aprendizaje profundo.
  • Calibración de cámara, visión estéreo.
  • Aprendizaje automático (SVM, KNN, redes neuronales).


Ejemplo: cambiar tamaño y convertir a escala de grises



#include <opencv2/opencv.hpp>using namespace cv;

int main() { // Cargamos la imagen a color Mat image = imread("input.jpg", IMREAD_COLOR); if (image.empty()) { return -1; }

// Convertimos a escala de grises Mat gray; cvtColor(image, gray, COLOR_BGR2GRAY);

// Reducimos el tamaño a la mitad Mat resized; resize(gray, resized, Size(), 0.5, 0.5, INTER_LINEAR);

// Guardamos el resultado imwrite("output_gray_resized.jpg", resized);

return 0;}


OpenCV utiliza la clase Mat para representar imágenes. Todas las operaciones se realizan a través de funciones estáticas o métodos. La biblioteca requiere instalación previa, pero ofrece la máxima flexibilidad y rendimiento.



3. Biblioteca stb_image



stb_image es parte del conjunto de bibliotecas de un solo archivo de cabecera de Sean Barrett. Está diseñada exclusivamente para cargar y guardar imágenes, sin funciones de procesamiento. Admite los formatos JPEG, PNG, BMP, GIF, PS

Recommendations