OpenCV GaussianBlur – Filtro de desenfoque y ejemplo en QT Creator

En OpenCV GaussianBlur es una operación o función que permite aplicar un filtro de desenfoque a una imagen. Este tipo de filtros es muy útil para quitar ruido de alta frecuencia (pixeles cambiando muy rápido) para una imagen. Por ejemplo, se puede aplicar en el proceso de crear un filtro de color. Para este tutorial se creará un ejemplo en el programa QT Creator y opencv en C++ para Ubuntu 16.04. Entonces el propósito del ejemplo es abrir una imagen jpg y aplicarle un filtro que suavizará a la imagen.

Requisitos para este tutorial.

OpenCV GaussianBlur ejemplo con QT Creator en Ubuntu 16.04

Sintaxis para OpenCV GaussianBlur en C++

  • void GaussianBlur(MatrizOriginal, MatrizDestino, Size(ValorImpar, ValorImpar2), SigmaX, SigmaY, TipoBorde);

Donde:

  • MatrizOriginal es una matriz del tipo Mat de X numero de dimensiones.
  • MatrizDestino, es también una matriz de la misma dimensión y tamaño que la mat original. Por ejemplo, esta matriz se usará para guardar el resultado.
  • ValorImpar. Es un numero entero que representa el ancho y largo de la ventana que se usará para calcular el tamaño del Kernel Gaussiano. Estos valores pueden ser distintos entre sí, pero DEBEN de ser valores impares.
  • SigmaX y SigmaY. Representa la desviación estándar en la dirección X y Y respectivamente del Kernel Gaussiano.
  • TipoBorde. Es un método de extrapolación del pixel que indica como actuará el filtro de desenfoque en los bordes de la imagen.

 

Ejemplo 1:

En el siguiente ejemplo 1 se leerá una imagen desde el disco duro y se creará una matriz para guardar el filtro de OpenCV GaussianBlur. Es importante mencionar, que la ventana que se esta usando es de 3×3 pixeles. Por el contrario se puede ver la diferencia de usar una ventana más grande para el Ejemplo 2. También es importante mencionar que para los valores SigmaX, SigmaY y TipoBorde, al colocar el valor entero 0, se usan los valores calculados de forma estándar.

  • Mat IMG1 = imread(«hola.jpg»);
  • Mat ImagenFiltrada;
  • GaussianBlur(IMG1,ImagenFiltrada,Size(3,3),0,0,0);

Ejemplo 2:

Para el ejemplo 2 usaremos prácticamente el mismo ejemplo 1, excepto que cambiaremos la opción de ventana. Como se puede observar por la siguiente imagen, la diferencia es que a mayor tamaño de la ventana, es mayor el desenfoque.

  • Mat IMG1 = imread(«hola.jpg»);
  • Mat ImagenFiltrada;
  • GaussianBlur(IMG1,ImagenFiltrada,Size(33,33),0,0,0);

Diferencia entre dos ejemplos de OpenCV GaussianBlur en QT Creator con Ubuntu 16.04

Ejemplo 3 – Usar OpenCV GaussianBlur con QT Creator en Ubuntu 16.04

Para el ejemplo 3 se diseñará un proyecto desde cero para utilizar a la función GaussianBlur. El objetivo de tal ejemplo, es contar con una interfaz gráfica en Ubuntu 16.04 que tenga un botón y dos etiquetas para mostrar dos imágenes. Por ejemplo, la primera imagen será la original y en la segunda etiqueta se mostrara el resultado de la función de OpenCV GaussianBlur. Es importante revisar los conocimientos o tutoriales previos para poder entender el siguiente ejemplo.

  1. Crear un proyecto Nuevo.
  2. Configurar el proyecto para que pueda compilar a las bibliotecas de OpenCV con QT-Creator en Ubuntu 16.04.
    1. Modificar el archivo. pro para agregar las siguientes líneas (Nota1):
      1. INCLUDEPATH += /usr/local/include/opencv2
      2. LIBS += -L/usr/local/lib -lopencv_core -lopencv_imgcodecs -lopencv_highgui -lopencv_videoio
      3. CONFIG += link_pkgconfig
      4. PKGCONFIG += opencv
    2. Agregar los archivos mat2qimage.cpp y mat2qimage.h al proyecto.
    3. Colocar las siguientes bibliotecas en el archivo MainWindow.cpp
      1. #include<opencv2/core/core.hpp>
      2. #include<opencv2/ml/ml.hpp>
      3. #include<opencv/cv.h>
      4. #include<opencv2/imgproc/imgproc.hpp>
      5. #include<opencv2/highgui/highgui.hpp>
      6. #include<opencv2/video/background_segm.hpp>
      7. #include<opencv2/videoio.hpp>
      8. #include<opencv2/imgcodecs.hpp>
      9. #include «mat2qimage.h»   //Nota2
      10. #include <QFileDialog>
    4. Agregar el espacio de nombre para opencv:
      1. using namespace cv;

Procedimiento para el código de MainWindow.cpp

Para completar el proyecto se modificara el código de MainWindow.cpp como sigue. Nota3.

  1. Agregar los elementos graficos al archivo de la interfaz de usuario (*.ui).
    1. Label_1 – Para mostrar la imagen original.
    2. Label_2 -mostrará la imagen procesada con el filtro de desenfoque.
    3. Button. El botón se usará para abrir una ventana de dialogo y poder seleccionar una imagen para procesarla.
      1. Agregar a la función onButtonClick.
  2. En la función onButtonClick se agregará el siguiente código:
    1. Abrir y regresar el nombre de una imagen:
      1. QString nombreImagen = QFileDialog::getOpenFileName(this, tr(«Abrir imagen»), «/home/», tr(«Imagenes (*.png *.jpg *.bmp)»));
    2. Guardar la lectura de una imagen con el nombre anterior.
      1. Mat IMAGEN = imread(nombreImagen.toUtf8().constData());
    3. Crear variables Mat para guardar la imagen filtrada y una imagen pequeña para mostrar en las etiquetas.
      1. Mat IMAGENchica;
      2. Mat IMAGENborrosa;
    4. Cambiar el tamaño de la imagen original para verla en la etiqueta y procesarla más rapido.
      1. cv::resize(IMAGEN,IMAGENchica,Size(250,250));
    5. Aplicar el filtro de desenfoque con GaussianBlur OpenCV.
      1. GaussianBlur(IMAGENchica,IMAGENborrosa,Size(33,33),0,0,0);
    6. Mostrar la imagen original pequeña en la etiqueta1.
      1. QImage qImage = Mat2QImage(IMAGENchica);
      2. QPixmap pixmap = QPixmap::fromImage(qImage);
      3. ui->label->clear();
      4. ui->label->setPixmap(pixmap);
    7. También se mostrará la imagen filtrada (IMAGENborrosa) en la etiqueta2.
      1. qImage = Mat2QImage(IMAGENborrosa);
      2. pixmap = QPixmap::fromImage(qImage);
      3. ui->label_2->clear();
      4. ui->label_2->setPixmap(pixmap);

Código de Github para MainWindow.cpp y OpenCV GaussianBlur del Ejemplo 3

Descarga el proyecto completo

https://hetpro-store.com/TUTORIALES/EjemplosProgramas/QT-OpenCV-5-GaussianBluer.zip

Notas del tutorial

Nota1. No todas las bibliotecas son necesarias, pero es practico tenerlas a la mano para darle más usabilidad a los proyectos en caso de quererlas usar. 

Nota2. Es posible que por el código HTML de este tutorial, cuando se copien estas bibliotecas, no se creara correctamente las dobles comillas. Es mejor re-escribirla directamente en el código de MainWindow.cpp. 

Nota3. En este tutorial esta el cogido completo del proyecto que puedes descargar o el enlace al código de MainWindow.cpp en github. Entonces si quieres copiar el código te recomendamos hacerlo desde el enlace de github, de otro modo puede que se copien caracteres que no son compatibles con el archivo de texto de c++. 

 

Documentación original

Autor: Dr. Rubén Estrada Marmolejo

 

 

Escríbenos tus dudas o comentarios

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus 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.