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: