Procesamiento de imágenes en C++: bibliotecas CImg, OpenCV y Magick++

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++: resumen de bibliotecas y ejemplos prácticos



El procesamiento de imágenes digitales es una de las tareas clave de la programación moderna. En C++ existen varias bibliotecas potentes que permiten cargar, modificar, analizar y guardar imágenes. En este artículo revisaremos tres de las herramientas más populares: CImg (ligera y sencilla), OpenCV (estándar industrial para visión por computadora) y GraphicsMagick (para conversión de alto rendimiento).



1. CImg — biblioteca ligera para operaciones básicas



CImg (The C++ Template Image Processing Library) es una biblioteca de solo cabecera que no requiere la instalación de DLL adicionales. Es ideal para proyectos educativos y prototipado rápido. Soporta los formatos BMP, PNG, JPEG, TIFF (a través de códecs externos).



Instalación

Basta con descargar el archivo CImg.h e incluirlo en el proyecto. Para trabajar con JPEG/PNG también se necesitarán libjpeg, libpng y zlib.



Ejemplo: carga, inversión de colores y guardado

#include "CImg.h"using namespace cimg_library;

int main() { // Cargamos la imagen CImg<unsigned char> img("input.jpg"); // Invertimos los colores (píxel = 255 - píxel) CImg<unsigned char> inverted = 255 - img; // Aplicamos desenfoque gaussiano (radio 3) CImg<unsigned char> blurred = img.get_blur(3); // Guardamos los resultados inverted.save("inverted.jpg"); blurred.save("blurred.jpg"); return 0;}


2. OpenCV — potente framework para visión por computadora



OpenCV (Open Source Computer Vision Library) es el estándar de facto para tareas de reconocimiento, detección de objetos y procesamiento complejo de imágenes. Soporta cientos de algoritmos, trabajo con video y redes neuronales. Es multiplataforma.



Instalación

En Ubuntu: sudo apt install libopencv-dev. En Windows — a través de vcpkg o el instalador oficial.



Ejemplo: detección de bordes (Canny) y cambio de tamaño

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

int main() { // Lectura de la imagen Mat img = imread("photo.jpg"); if (img.empty()) return -1; // Conversión a escala de grises Mat gray; cvtColor(img, gray, COLOR_BGR2GRAY); // Detección de bordes con el algoritmo Canny Mat edges; Canny(gray, edges, 50, 150); // Cambio de tamaño a 300x300 Mat resized; resize(img, resized, Size(300, 300)); // Guardado y visualización imwrite("edges.jpg", edges); imshow("Original", img); waitKey(0); return 0;}


3. GraphicsMagick — conversión rápida y procesamiento por lotes



GraphicsMagick es un fork de ImageMagick, orientado a la estabilidad y el rendimiento. Se utiliza para conversión masiva, cambio de tamaño, marcas de agua. Trabaja con más de 200 formatos.



Instalación

A través del gestor de paquetes: sudo apt install graphicsmagick. Para C++ se requiere la biblioteca libgraphicsmagick++-dev.



Ejemplo: reducción de imagen y conversión a PNG

#include <Magick++.h>using namespace Magick;

int main() { InitializeMagick(nullptr); // Carga de la imagen Image image("input.tiff"); // Escalado a 800 píxeles de ancho image.scale(Geometry("800x")); // Rotación de 90 grados image.rotate(90); // Configuración de la calidad JPEG (si el formato de salida es JPEG) image.quality(85); // Guardado en PNG image.write("output.png"); return 0;}


Comparación de bibliotecas

  • CImg — inicio simple, mínimo

Recommendations