OpenCV - Blur (Averaging)

La sfocatura (smussatura) è l'operazione di elaborazione delle immagini comunemente utilizzata per ridurre il rumore dell'immagine. Il processo rimuove il contenuto ad alta frequenza, come i bordi, dall'immagine e la rende liscia.

In generale la sfocatura si ottiene convolgendo (ogni elemento dell'immagine viene aggiunto ai suoi vicini locali, pesati dal kernel) l'immagine attraverso un kernel di filtro passa basso.

Sfocatura (media)

Durante questa operazione l'immagine viene convoluta con un box filter (normalizzato). In questo processo, l'elemento centrale dell'immagine viene sostituito dalla media di tutti i pixel nell'area del kernel.

È possibile eseguire questa operazione su un'immagine utilizzando il metodo blur() del imgprocclasse. Di seguito è riportata la sintassi di questo metodo:

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

Questo metodo accetta i seguenti parametri:

  • src - A Mat oggetto che rappresenta la sorgente (immagine in ingresso) per questa operazione.

  • dst - A Mat oggetto che rappresenta la destinazione (immagine di output) per questa operazione.

  • ksize - A Size oggetto che rappresenta la dimensione del kernel.

  • anchor - Una variabile di tipo intero che rappresenta il punto di ancoraggio.

  • borderType - Una variabile di tipo intero che rappresenta il tipo di bordo da utilizzare per l'output.

Esempio

Il seguente programma mostra come eseguire l'operazione di media (sfocatura) su un'immagine.

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");
   }
}

Supponiamo che la seguente sia l'immagine in ingresso sample.jpg specificato nel programma di cui sopra.

Produzione

All'esecuzione del programma, otterrai il seguente output:

Image Processed

Se apri il percorso specificato, puoi osservare l'immagine di output come segue: