DIP Java - Applicazione di filigrana

In questo capitolo impariamo due modi per applicare la filigrana alle immagini. Questi modi sono:

  • Applicazione di filigrana di testo
  • Applicazione della filigrana all'immagine

Applicazione di filigrana di testo

Noi usiamo OpenCV funzione putTextper applicare la filigrana di testo all'immagine. Può essere trovato sottoCorepacchetto. La sua sintassi è data di seguito:

Core.putText(source, Text, Point, fontFace ,fontScale , color);

I parametri di questa funzione sono descritti di seguito:

Sr.No. Parametro e descrizione
1

Source

È l'immagine di origine.

2

Text

È la stringa di testo che apparirà sull'immagine.

3

Point

È il punto in cui il testo dovrebbe apparire sull'immagine.

4

fontFace

Tipo di carattere. Ad esempio: FONT_HERSHEY_SIMPLEX, FONT_HERSHEY_PLAIN, FONT_HERSHEY_COMPLEX ecc.

5

fontScale

È il fattore di scala del carattere che viene moltiplicato per la dimensione di base specifica del carattere.

6

color

È il colore del testo.

Oltre al metodo putText, ci sono altri metodi forniti dalla classe Core. Sono descritti brevemente:

Sr.No. Metodo e descrizione
1

normalize(Mat src, Mat dst, double alpha, double beta, int norm_type)

Normalizza la norma o l'intervallo di valori di un array.

2

perspectiveTransform(Mat src, Mat dst, Mat m)

Esegue la trasformazione in matrice prospettica dei vettori.

3

phase(Mat x, Mat y, Mat angle)

Calcola l'angolo di rotazione dei vettori 2D.

4

rectangle(Mat img, Point pt1, Point pt2, Scalar color)

Disegna un rettangolo alto a destra semplice, spesso o pieno.

5

reduce(Mat src, Mat dst, int dim, int rtype, int dtype)

Riduce una matrice a un vettore.

6

transform(Mat src, Mat dst, Mat m)

Esegue la trasformazione della matrice di ogni elemento dell'array.

Esempio

L'esempio seguente dimostra l'uso della classe Core per applicare la filigrana di testo a un'immagine:

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

import org.opencv.highgui.Highgui;
import org.opencv.imgproc.Imgproc;

public class Main {
   public static void main( String[] args ) {
   
      try{
         System.loadLibrary( Core.NATIVE_LIBRARY_NAME );
         Mat source = Highgui.imread("digital_image_processing.jpg",  Highgui.CV_LOAD_IMAGE_COLOR);
         Mat destination = new Mat(source.rows(),source.cols(), source.type());  
         
         Core.putText(source, "Tutorialspoint.com", new Point  (source.rows()/2,source.cols()/2), Core.FONT_ITALIC,new Double(1),new  Scalar(255));

         Highgui.imwrite("watermarked.jpg", source);
         
      } catch (Exception e) {
         System.out.println("Error: "+e.getMessage());
      }
   }
}

Produzione

Quando esegui il codice dato, viene visualizzato il seguente output:

Immagine originale

Immagine con filigrana di testo

Applicazione della filigrana all'immagine

Useremo OpenCV funzione addWeightedper applicare la filigrana all'immagine. Può essere trovato sottoCorepacchetto. La sua sintassi è data di seguito:

Core.addWeighted(InputArray src1, alpha, src2 (Watermark image), beta, gamma, OutputArray dst);

I parametri di questa funzione sono descritti di seguito:

Sr.No. Parametro e descrizione
1

src1

È il primo array di input.

2

alpha

È il peso dei primi elementi dell'array.

3

src2

È il secondo array di input della stessa dimensione e numero di canale di src1.

4

beta

È il peso dei secondi elementi dell'array.

5

gamma

È lo scalare aggiunto a ciascuna somma.

6

dst

È l'array di output che ha la stessa dimensione e numero di canali degli array di input.

Esempio

L'esempio seguente mostra l'uso della classe Core per applicare la filigrana di un'immagine a un'immagine:

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

import org.opencv.highgui.Highgui;
import org.opencv.imgproc.Imgproc;

public class Main {
   public static void main( String[] args ) {
   
      try{
         System.loadLibrary( Core.NATIVE_LIBRARY_NAME );
         
         Mat source = Highgui.imread("digital_image_processing.jpg",  Highgui.CV_LOAD_IMAGE_COLOR);
         Mat waterMark = Highgui.imread("watermark.png",  Highgui.CV_LOAD_IMAGE_COLOR);
         Rect ROI = new Rect(waterMark.rows() * 4,waterMark.cols(),  waterMark.cols(),waterMark.rows());
         
         Core.addWeighted(source.submat(ROI), 0.8, waterMark, 0.2, 1,  source.submat(ROI));
         Highgui.imwrite("watermarkedImage.jpg", source);
         
      } catch (Exception e) {
         System.out.println("Error: " + e.getMessage());
      }
   }
}

Produzione

Quando esegui il codice dato, viene visualizzato il seguente output:

Immagine originale

L'immagine della filigrana

Immagine con filigrana