OpenCV resize en C++ – Sintaxis y Ejemplos

La función de OpenCV resize permite cambiar el tamaño de una variable Mat de OpenCV. En otras palabras podemos cambiar la proporción y tamaño de una imagen. Esta función tiene dos formas de uso, con 3 y con 6 parámetros de entrada. En el primer caso se requiere: matriz original, matriz nueva y tamaño nuevo. Entonces para el segundo modo de operación, también se puede especificar el cambio en la proporción en X o en Y. Es decir cambiar la proporción del factor de escala en ancho o alto respectivamente. Incluso la función nos permite cambiar el método matemático con el cual se calcula el nuevo tamaño.

En este tutorial te presentaremos la sintaxis y algunos ejemplos prácticos. Entonces para comenzar con los ejemplos, se diseñarán a partir del ejemplo OpenCV abrir camara IP con QT Creator. Por lo tanto si te interesa repetir los ejemplos, los puedes crear utilizando este proyecto, que lo puedes descargar en este enlace: Descarga. También puedes ver como crear un proyecto nuevo en QT Creator.

OpenCV resize en C++

Sintaxis:

La sintaxis se refiere a los parámetros de entrada y salida que utiliza la función de OpenCV resize. También se puede entonces utilizar de dos formas posibles:

  • Forma 1:

    • void resize(MatrizOriginal, MatrizNuevoTamaño, Size(X, Y));
  • Forma 2:

    • void resize(MatrizOriginal, MatrizNuevoTamaño, Size(X,Y), FX, FY, Método);

Donde:

  • X. Es una variable o constante entera que representa el nuevo ancho de la imagen.
  • Y. Es una constante o variable entera que representa el nuevo largo de la imagen.
  • FX. Factor de escala en X.
  • FY. El factor de escala en Y.
  • Método. Tipo de método para la interpolación y creación de la nueva matriz. Ejemplos:
      • INTER_NEAREST. Es una interpolación del vecino cercano.
      • INTER_LINEAR. Interpolación bilineal. Esta es el método estándar que se usa en el modo 1.
      • INTER_AREA. Es un re-muestreo usando una relación del área de cada pixel
      • INTER_CUBIC. Interpolación bi-cubica que usa un área de 4×4 pixeles.
      • INTER_LANCZOS4. Es una interpolación del tipo Lanczos que usa 8×8 pixeles.

 

Ejemplo de la función de OpenCV resize.

Ejemplo-1.

Para el ejemplo 1, se utiliza un QTimer para que sea ejecutado cada 50ms, (para poder usar una cámara en otros ejemplos). Entonces en cada iteración o ejecución de la dicha función, se lee una imagen llamada imagen.png y se guarda en una variable Mat. Por ejemplo, esta imagen tiene que estar ubicada en la carpeta del proyecto (carpeta de los ejecutables). Una vez que se ha leído la imagen y se ha guardado, se procede a procesarla con la función de OpenCV resize.

Mat IMAGEN = imread(«imagen.png»); //Declara matriz IMAGEN y lee una imagen png
Mat IMG1,IMG2,IMG3; //Declara 3 matrices para guardar los cambios de tamaño

//Resize modo 1, la versión básica
cv::resize(IMAGEN,IMG1,Size(400,394));

//Resize modo 2, método de interpolación distinto
cv::resize(IMAGEN,IMG2,Size(600,394),0,0,INTER_LANCZOS4);

//Resize modo 2, método de interpolación distinto
cv::resize(IMAGEN,IMG3,Size(1151,181),0,0,INTER_AREA);

//Mostrar la matriz IMG1 en la etiqueta 1
QImage qImage = Mat2QImage(IMG1);
QPixmap pixmap = QPixmap::fromImage(qImage);
ui->label->clear();
ui->label->setPixmap(pixmap);

//Mostrar la matriz IMG2 en la etiqueta 2
qImage = Mat2QImage(IMG2);
pixmap = QPixmap::fromImage(qImage);
ui->label_2->clear();
ui->label_2->setPixmap(pixmap);

//Mostrar la matriz IMG3 en la etiqueta 5
qImage = Mat2QImage(IMG3);
pixmap = QPixmap::fromImage(qImage);
ui->label_5->clear();
ui->label_5->setPixmap(pixmap);

Código de la función del QTimer en GitHub

Descarga el proyecto completo para QTCreator en Linux Ubuntu 16.04

https://hetpro-store.com/TUTORIALES/EjemplosProgramas/QT-OpenCV-4-resize.zip

 

Referencias:

7 Comments

  1. Bianca Del Solar mayo 15, 2018
  2. Danny enero 23, 2020

Escríbenos tus dudas o comentarios

Usamos Cookies en nuestro sitio WEB

Por favor confirma, si aceptas nuestras cookies de rastreo. También puedes negar el uso de cookies de rastreo y seguir navegando sin que ninguna información sea enviada a servicios de terceros.