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: