OpenCV - Desenfoque (promediado)

El desenfoque (suavizado) es la operación de procesamiento de imágenes más utilizada para reducir el ruido de la imagen. El proceso elimina el contenido de alta frecuencia, como los bordes, de la imagen y la suaviza.

En general, el desenfoque se logra convolucionando (cada elemento de la imagen se agrega a sus vecinos locales, ponderados por el kernel) la imagen a través de un kernel de filtro de paso bajo.

Desenfoque (promediado)

Durante esta operación, la imagen se convoluciona con un filtro de caja (normalizado). En este proceso, el elemento central de la imagen se reemplaza por el promedio de todos los píxeles en el área del núcleo.

Puede realizar esta operación en una imagen utilizando el método blur() del imgprocclase. A continuación se muestra la sintaxis de este método:

blur(src, dst, ksize, anchor, borderType)

Este método acepta los siguientes parámetros:

  • src - A Mat objeto que representa la fuente (imagen de entrada) para esta operación.

  • dst - A Mat objeto que representa el destino (imagen de salida) para esta operación.

  • ksize - A Size objeto que representa el tamaño del kernel.

  • anchor - Una variable de tipo entero que representa el punto de ancla.

  • borderType - Una variable de tipo entero que representa el tipo de borde que se utilizará en la salida.

Ejemplo

El siguiente programa demuestra cómo realizar la operación de promediado (desenfoque) en una imagen.

import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.core.Point;
import org.opencv.core.Size;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;

public class BlurTest {
   public static void main(String args[]) {
      // Loading the OpenCV core library
      System.loadLibrary( Core.NATIVE_LIBRARY_NAME );

      // Reading the Image from the file and storing it in to a Matrix object
      String file ="C:/EXAMPLES/OpenCV/sample.jpg";
      Mat src = Imgcodecs.imread(file);

      // Creating an empty matrix to store the result
      Mat dst = new Mat();

      // Creating the Size and Point objects
      Size size = new Size(45, 45);
      Point point = new Point(20, 30);

      // Applying Blur effect on the Image
      Imgproc.blur(src, dst, size, point, Core.BORDER_DEFAULT);

      // blur(Mat src, Mat dst, Size ksize, Point anchor, int borderType)
      // Writing the image
      Imgcodecs.imwrite("E:/OpenCV/chap9/blur.jpg", dst);
      System.out.println("Image processed");
   }
}

Suponga que la siguiente es la imagen de entrada sample.jpg especificado en el programa anterior.

Salida

Al ejecutar el programa, obtendrá el siguiente resultado:

Image Processed

Si abre la ruta especificada, puede observar la imagen de salida de la siguiente manera: