OpenCV - Aggiunta di bordi

Questo capitolo ti insegna come rospare i bordi di un'immagine.

Il metodo copyMakeBorder ()

È possibile aggiungere vari bordi a un'immagine utilizzando il metodo copyMakeBorder() della classe denominata Core, che appartiene al pacchetto org.opencv.core. la seguente è la sintassi di questo metodo.

copyMakeBorder(src, dst, top, bottom, left, right, borderType)

Questo metodo accetta i seguenti parametri:

  • src - Un oggetto della classe Mat che rappresenta l'immagine sorgente (ingresso).

  • dst - Un oggetto della classe Mat che rappresenta l'immagine di destinazione (output).

  • top - Una variabile di numero intero il tipo intero che rappresenta la lunghezza del bordo nella parte superiore dell'immagine.

  • bottom - Una variabile di numero intero il tipo intero che rappresenta la lunghezza del bordo nella parte inferiore dell'immagine.

  • left - Una variabile di numero intero il tipo intero che rappresenta la lunghezza del bordo a sinistra dell'immagine.

  • right - Una variabile di numero intero il tipo intero che rappresenta la lunghezza del bordo a destra dell'immagine.

  • borderType - Una variabile di tipo integer che rappresenta il tipo di bordo da utilizzare.

Esempio

Il seguente programma è un esempio che mostra come aggiungere un bordo a una data immagine.

import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.imgcodecs.Imgcodecs;

public class AddingBorder {
   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/chap15/input.jpg";
      Mat src = Imgcodecs.imread(file);

      // Creating an empty matrix to store the result
      Mat dst = new Mat();
   
      Core.copyMakeBorder(src, dst, 20, 20, 20, 20, Core.BORDER_CONSTANT);
      Imgcodecs.imwrite("E:/OpenCV/chap15/border_constant.jpg", dst);

      System.out.println("Image Processed");
   }
}

Supponiamo che la seguente sia l'immagine in ingresso thresh_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:

Altri tipi di bordi

Oltre al tipo di bordo, BORDER_CONSTANTdimostrato nell'esempio precedente, OpenCV soddisfa vari altri tipi di bordi. Tutti questi tipi sono rappresentati da campi statici predefiniti (valori fissi) della classe Core.

È possibile scegliere il tipo di operazione di soglia necessaria, passando il rispettivo valore predefinito al parametro denominato borderType del copyMakeBorder() metodo.

Core.copyMakeBorder(src, dst, 20, 20, 20, 20, Core.BORDER_CONSTANT);

Di seguito sono riportati i valori che rappresentano i vari tipi di operazioni ai confini e le rispettive uscite.

Funzionamento e descrizione Produzione
BORDER_CONSTANT
BORDER_ISOLATED
BORDER_DEFAULT
BORDER_REFLECT
BORDER_REFLECT_101
BORDER_REFLECT101
BORDER_REPLICATE
BORDER_WRAP