Procesamiento de imágenes en C++: resize y crop con la biblioteca OpenCV

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: resize y crop en C++ con OpenCV

\n\n

En el desarrollo moderno de aplicaciones, especialmente en el ámbito de la visión por computadora, el web scraping o el procesamiento de archivos multimedia, a menudo surge la necesidad de cambiar el tamaño (resize) y recortar (crop) imágenes de forma programática. El lenguaje C++ combinado con la potente biblioteca OpenCV proporciona todas las herramientas necesarias para ello. En este artículo, analizaremos en detalle cómo realizar estas operaciones, qué parámetros afectan la calidad del resultado y proporcionaremos ejemplos de código listos para usar.

\n\n

La biblioteca OpenCV: el estándar de facto para trabajar con imágenes en C++

\n\n

OpenCV (Open Source Computer Vision Library) es una biblioteca multiplataforma de código abierto que contiene cientos de algoritmos optimizados para el procesamiento de imágenes y video. Está escrita en C++ y tiene enlaces para Python, Java y otros lenguajes. Para C++, OpenCV es la solución más eficiente y funcional.

\n\n

Principales ventajas de OpenCV para las tareas de resize y crop:

\n
    \n
  • Alta velocidad: todas las funciones utilizan instrucciones SIMD y subprocesamiento múltiple.
  • \n
  • Flexibilidad: soporte para varios métodos de interpolación (bilineal, bicúbica, método Lanczos, etc.).
  • \n
  • Comodidad: trabajo con imágenes a través de la clase cv::Mat, que gestiona la memoria automáticamente.
  • \n
\n\n

Instalación de OpenCV para C++

\n

Para empezar, es necesario instalar la biblioteca. La forma más común es a través del gestor de paquetes vcpkg o compilando desde el código fuente. Ejemplo de instalación mediante vcpkg:

\n
git clone https://github.com/Microsoft/vcpkg.git\ncd vcpkg\n./bootstrap-vcpkg.sh\n./vcpkg install opencv4
\n\n

Después de la instalación, enlace la biblioteca en su archivo CMakeLists.txt:

\n
find_package(OpenCV REQUIRED)\ntarget_link_libraries(your_project ${OpenCV_LIBS})
\n\n

Cambio de tamaño de imagen (resize)

\n

La función cv::resize() permite cambiar las dimensiones de la imagen original a un ancho y alto determinados. Sintaxis:

\n
cv::resize(\n    InputArray src,      // imagen original\n    OutputArray dst,     // imagen resultante\n    Size dsize,          // nuevo tamaño (ancho, alto)\n    double fx = 0,       // escala en X (si no se especifica dsize)\n    double fy = 0,       // escala en Y\n    int interpolation = INTER_LINEAR  // método de interpolación\n);
\n\n

El parámetro interpolation determina el algoritmo utilizado para calcular los nuevos píxeles. Las principales opciones son:

\n
    \n
  • INTER_NEAREST: método del vecino más cercano (rápido, pero baja calidad).
  • \n
  • INTER_LINEAR: interpolación bilineal (buen equilibrio entre velocidad y calidad).
  • \n
  • INTER_CUBIC: interpolación bicúbica (mayor calidad, pero más lenta).
  • \n
  • INTER_LANCZOS4: interpolación Lanczos (mejor calidad al ampliar).
  • \n
\n\n

Ejemplo de ampliación de imagen al doble con interpolación bicúbica:

\n
#include <opencv2/opencv.hpp>\n#include <iostream>\n\nint main() {\n    cv::Mat src = cv::imread("input.jpg");\n    if (src.empty()) {\n        std::cerr << "No se pudo cargar la imagen" << std::endl;\n        return -1;\n    }\n\n    cv::Mat dst;\n    cv::resize(src, dst, cv::Size(), 2.0, 2.0, cv::INTER_CUBIC);\n\n    cv::imwrite("output_resized.jpg", dst);\n    std::cout << "Imagen ampliada y guardada" << std::endl;\n    return 0;\n}
\n\n

Recorte de imagen (crop)

\n

En OpenCV no existe una función separada para recortar. En su lugar, se utiliza el mecanismo de Región de Interés (ROI): la selección de un área rectangular en la imagen. Esto se realiza mediante el operador () o el método cv::Mat::operator().

\n\n

Sintaxis de recorte

Recommendations