Trabajo con imágenes: resize y crop en C++ con 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++

En la gráfica computacional moderna y la visión artificial, las operaciones de cambio de tamaño (resize) y recorte (crop) de imágenes son fundamentales. Ya sea que esté desarrollando una aplicación de procesamiento de fotos, un sistema de reconocimiento facial o simplemente desee preparar imágenes para una red neuronal, no puede prescindir de estas funciones. En este artículo, veremos en detalle cómo realizar resize y crop en el lenguaje C++ utilizando la potente biblioteca OpenCV.



¿Por qué OpenCV?

OpenCV (Open Source Computer Vision Library) es el estándar de facto para tareas de visión artificial. Está escrita en C/C++ y ofrece cientos de algoritmos optimizados. Para trabajar con resize y crop solo necesitaremos unas pocas funciones, pero su rendimiento y flexibilidad hacen de OpenCV la elección ideal.

Puede instalar OpenCV a través de un gestor de paquetes (por ejemplo, vcpkg install opencv o brew install opencv), o compilándolo desde el código fuente. Los detalles de instalación están fuera del alcance de este artículo, pero se asume que ya tiene un proyecto configurado con la biblioteca vinculada.



Preparación: cargar una imagen

Antes de modificar algo, la imagen debe cargarse. En OpenCV esto se hace con la función imread():

#include <opencv2/opencv.hpp>#include <iostream>

using namespace cv;using namespace std;

int main() { // Cargamos la imagen Mat image = imread("input.jpg"); if (image.empty()) { cerr << "¡Error al cargar la imagen!" << endl; return -1; } cout << "Tamaño de la imagen original: " << image.cols << " x " << image.rows << endl; return 0;}

La función devuelve un objeto de tipo Mat (matriz). Si el archivo no se encuentra o está dañado, image.empty() devolverá true.



Cambio de tamaño de imagen (resize) en C++

La función resize() en OpenCV permite escalar una imagen a dimensiones arbitrarias. Soporta varios métodos de interpolación que afectan la calidad del resultado.



Sintaxis de resize

void resize(InputArray src, OutputArray dst, Size dsize,             double fx = 0, double fy = 0, int interpolation = INTER_LINEAR);
  • src — imagen de origen.
  • dst — imagen de destino.
  • dsize — nuevo tamaño (ancho, alto). Puede especificarse explícitamente o calcularse mediante fx y fy.
  • fx — factor de escala en el ancho (si dsize = Size()).
  • fy — factor de escala en el alto.
  • interpolation — método de interpolación. Opciones principales:
    • INTER_NEAREST — vecino más cercano (rápido, pero con artefactos).
    • INTER_LINEAR — bilineal (por defecto, buen equilibrio).
    • INTER_CUBIC — bicúbica (más lenta, pero de mayor calidad).
    • INTER_AREA — se usa al reducir la imagen (área de píxeles).


Ejemplo 1: Reducción a un tamaño fijo

Mat resized;Size newSize(300, 200); // Ancho 300, alto 200resize(image, resized, newSize, 0, 0, INTER_AREA);imwrite("resized_fixed.jpg", resized);cout << "Tamaño después de resize: " << resized.cols << " x " << resized.rows << endl;


Ejemplo 2: Escalado a la mitad manteniendo la proporción

Mat scaled;resize(image, scaled, Size(), 0.5, 0.5, INTER_LINEAR);imwrite("scaled_half.jpg", scaled);

Si se especifica dsize = Size(), los nuevos tamaños se calculan mediante las fórmulas: dsiz

Recommendations