OpenCV - Operazioni morfologiche
Nei capitoli precedenti, abbiamo discusso il processo di erosion e dilation. Oltre a questi due, OpenCV ha più trasformazioni morfologiche. IlmorphologyEx() del metodo della classe Imgproc viene utilizzato per eseguire queste operazioni su una determinata immagine.
Di seguito è riportata la sintassi di questo metodo:
morphologyEx(src, dst, op, kernel)
Questo metodo accetta i seguenti parametri:
src - Un oggetto della classe Mat che rappresenta l'immagine sorgente (ingresso).
dst - oggetto della classe Mat che rappresenta l'immagine di destinazione (output).
op - Un numero intero che rappresenta il tipo di operazione morfologica.
kernel - Una matrice del kernel.
Esempio
Il seguente programma mostra come applicare l'operazione morfologica "top-hat" su un'immagine utilizzando la libreria OpenCV.
import org.opencv.core.Core;
import org.opencv.core.CvType;
import org.opencv.core.Mat;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;
public class MorphologyExTest {
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 ="E:/OpenCV/chap12/morph_input.jpg";
Mat src = Imgcodecs.imread(file);
// Creating an empty matrix to store the result
Mat dst = new Mat();
// Creating kernel matrix
Mat kernel = Mat.ones(5,5, CvType.CV_32F);
// Applying Blur effect on the Image
Imgproc.morphologyEx(src, dst, Imgproc.MORPH_TOPHAT, kernel);
// Writing the image
Imgcodecs.imwrite("E:/OpenCV/chap12/morph_tophat.jpg", dst);
System.out.println("Image Processed");
}
}
Supponiamo che la seguente sia l'immagine in ingresso morph_input.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:
Più operazioni
Oltre all'operazione morfologica TOPHAT, dimostrato nel precedente example, OpenCV soddisfa vari altri tipi di morfologie. Tutti questi tipi sono rappresentati da campi statici predefiniti (valori fissi) diImgproc classe.
Puoi scegliere il tipo di morfologia di cui hai bisogno passando il rispettivo valore predefinito al parametro op del morphologyEx() metodo.
// Applying Blur effect on the Image
Imgproc.morphologyEx(src, dst, Imgproc.MORPH_TOPHAT, kernel);
Di seguito sono riportati i valori che rappresentano il tipo di operazioni morfologiche e le rispettive uscite.
Funzionamento e descrizione | Produzione |
---|---|
MORPH_BLACKHAT |
|
MORPH_CLOSE |
|
MORPH_CROSS |
|
MORPH_DILATE |
|
MORPH_ELLIPSE |
|
MORPH_ERODE |
|
MORPH_GRADIENT |
|
MORPH_OPEN |
|
MORPH_RECT |
|
MORPH_TOPHAT |
|