Java DIP - Wasserzeichen anwenden
In diesem Kapitel lernen wir zwei Möglichkeiten, Wasserzeichen auf Bilder anzuwenden. Diese Wege sind -
- Anwenden von Textwasserzeichen
- Anwenden des Bildwasserzeichens
Anwenden von Textwasserzeichen
Wir gebrauchen OpenCV Funktion putTextTextwasserzeichen auf Bild anwenden. Es kann unter gefunden werdenCorePaket. Die Syntax ist unten angegeben -
Core.putText(source, Text, Point, fontFace ,fontScale , color);
Die Parameter dieser Funktion werden nachfolgend beschrieben -
Sr.Nr. | Parameter & Beschreibung |
---|---|
1 | Source Es ist ein Quellbild. |
2 | Text Dies ist der Zeichenfolgentext, der auf dem Bild angezeigt wird. |
3 | Point Dies ist der Punkt, an dem Text auf dem Bild erscheinen soll. |
4 | fontFace Schriftart. Zum Beispiel - FONT_HERSHEY_SIMPLEX, FONT_HERSHEY_PLAIN, FONT_HERSHEY_COMPLEX usw. |
5 | fontScale Der Skalierungsfaktor der Schriftart wird mit der schriftartenspezifischen Basisgröße multipliziert. |
6 | color Es ist Textfarbe. |
Neben der putText-Methode gibt es weitere Methoden, die von der Core-Klasse bereitgestellt werden. Sie werden kurz beschrieben -
Sr.Nr. | Methode & Beschreibung |
---|---|
1 | normalize(Mat src, Mat dst, double alpha, double beta, int norm_type) Es normalisiert die Norm oder den Wertebereich eines Arrays. |
2 | perspectiveTransform(Mat src, Mat dst, Mat m) Es führt die perspektivische Matrixtransformation von Vektoren durch. |
3 | phase(Mat x, Mat y, Mat angle) Es berechnet den Drehwinkel von 2D-Vektoren. |
4 | rectangle(Mat img, Point pt1, Point pt2, Scalar color) Es zeichnet ein einfaches, dickes oder ausgefülltes rechtes Rechteck. |
5 | reduce(Mat src, Mat dst, int dim, int rtype, int dtype) Es reduziert eine Matrix auf einen Vektor. |
6 | transform(Mat src, Mat dst, Mat m) Es führt die Matrixtransformation jedes Array-Elements durch. |
Beispiel
Das folgende Beispiel zeigt die Verwendung der Core-Klasse zum Anwenden von Textwasserzeichen auf ein Bild.
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());
}
}
}
Ausgabe
Wenn Sie den angegebenen Code ausführen, wird die folgende Ausgabe angezeigt:
Original Bild
![](https://post.nghiatu.com/assets/tutorial/java_dip/images/digital_image_processing.jpg)
Text Wasserzeichen Bild
![](https://post.nghiatu.com/assets/tutorial/java_dip/images/watermarked.jpg)
Anwenden eines Bildwasserzeichens auf ein Bild
Wir werden verwenden OpenCV Funktion addWeightedum ein Bildwasserzeichen auf das Bild anzuwenden. Es kann unter gefunden werdenCorePaket. Die Syntax ist unten angegeben -
Core.addWeighted(InputArray src1, alpha, src2 (Watermark image), beta, gamma, OutputArray dst);
Die Parameter dieser Funktion werden nachfolgend beschrieben -
Sr.Nr. | Parameter & Beschreibung |
---|---|
1 | src1 Es ist das erste Eingabearray. |
2 | alpha Dies ist das Gewicht der ersten Array-Elemente. |
3 | src2 Es ist das zweite Eingangsarray mit der gleichen Größe und Kanalnummer wie src1. |
4 | beta Dies ist das Gewicht der zweiten Array-Elemente. |
5 | gamma Es ist der Skalar, der zu jeder Summe addiert wird. |
6 | dst Es ist das Ausgabearray, das dieselbe Größe und Anzahl von Kanälen wie die Eingabearrays hat. |
Beispiel
Das folgende Beispiel zeigt die Verwendung der Core-Klasse zum Anwenden eines Bildwasserzeichens auf ein Bild.
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());
}
}
}
Ausgabe
Wenn Sie den angegebenen Code ausführen, wird die folgende Ausgabe angezeigt:
Original Bild
![](https://post.nghiatu.com/assets/tutorial/java_dip/images/digital_image_processing.jpg)
Das Wasserzeichenbild
![](https://post.nghiatu.com/assets/tutorial/java_dip/images/watermark.jpg)
Bild mit Wasserzeichen
![](https://post.nghiatu.com/assets/tutorial/java_dip/images/watermarkedImage.jpg)