Java DIP - stosowanie znaku wodnego
W tym rozdziale poznamy dwa sposoby umieszczania znaku wodnego na obrazach. Te sposoby to -
- Stosowanie tekstowego znaku wodnego
- Stosowanie znaku wodnego obrazu
Stosowanie tekstowego znaku wodnego
Używamy OpenCV funkcjonować putTextaby zastosować tekstowy znak wodny do obrazu. Można go znaleźć podCorepakiet. Jego składnia jest podana poniżej -
Core.putText(source, Text, Point, fontFace ,fontScale , color);
Parametry tej funkcji opisano poniżej -
Sr.No. | Parametr i opis |
---|---|
1 | Source To jest obraz źródłowy. |
2 | Text Jest to ciąg tekstowy, który pojawiłby się na obrazku. |
3 | Point Jest to punkt, w którym tekst powinien pojawić się na obrazie. |
4 | fontFace Typ czcionki. Na przykład - FONT_HERSHEY_SIMPLEX, FONT_HERSHEY_PLAIN, FONT_HERSHEY_COMPLEX itp. |
5 | fontScale Jest to współczynnik skali czcionki pomnożony przez rozmiar podstawowy danej czcionki. |
6 | color To jest kolor tekstu. |
Oprócz metody putText istnieją inne metody dostarczane przez klasę Core. Są one krótko opisane -
Sr.No. | Metoda i opis |
---|---|
1 | normalize(Mat src, Mat dst, double alpha, double beta, int norm_type) Normalizuje normę lub zakres wartości tablicy. |
2 | perspectiveTransform(Mat src, Mat dst, Mat m) Wykonuje perspektywiczną transformację macierzy wektorów. |
3 | phase(Mat x, Mat y, Mat angle) Oblicza kąt obrotu wektorów 2D. |
4 | rectangle(Mat img, Point pt1, Point pt2, Scalar color) Rysuje prosty, gruby lub wypełniony prostokąt w prawo. |
5 | reduce(Mat src, Mat dst, int dim, int rtype, int dtype) Redukuje macierz do wektora. |
6 | transform(Mat src, Mat dst, Mat m) Wykonuje transformację macierzy każdego elementu tablicy. |
Przykład
Poniższy przykład demonstruje użycie klasy Core do zastosowania tekstowego znaku wodnego na obrazie -
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());
}
}
}
Wynik
Po wykonaniu podanego kodu widoczne są następujące dane wyjściowe -
Oryginalny obraz
Obraz ze znakiem wodnym tekstu
Stosowanie znaku wodnego obrazu na obrazie
Będziemy używać OpenCV funkcjonować addWeightedaby zastosować znak wodny obrazu do obrazu. Można go znaleźć podCorepakiet. Jego składnia jest podana poniżej -
Core.addWeighted(InputArray src1, alpha, src2 (Watermark image), beta, gamma, OutputArray dst);
Parametry tej funkcji opisano poniżej -
Sr.No. | Parametr i opis |
---|---|
1 | src1 Jest to pierwsza tablica wejściowa. |
2 | alpha Jest to waga pierwszych elementów tablicy. |
3 | src2 Jest to druga tablica wejściowa o takim samym rozmiarze i numerze kanału jak src1. |
4 | beta Jest to waga drugich elementów tablicy. |
5 | gamma Jest to wartość skalarna dodawana do każdej sumy. |
6 | dst Jest to tablica wyjściowa, która ma taki sam rozmiar i liczbę kanałów jak tablice wejściowe. |
Przykład
Poniższy przykład demonstruje użycie klasy Core do zastosowania znaku wodnego obrazu do obrazu -
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());
}
}
}
Wynik
Po wykonaniu podanego kodu widoczne są następujące dane wyjściowe -