Java DIP - Применение водяного знака
В этой главе мы узнаем о двух способах нанесения водяных знаков на изображения. Эти способы -
- Применение текстового водяного знака
- Применение водяного знака изображения
Применение текстового водяного знака
Мы используем OpenCV функция putTextприменить текстовый водяной знак к изображению. Его можно найти вCoreпакет. Его синтаксис приведен ниже -
Core.putText(source, Text, Point, fontFace ,fontScale , color);
Параметры этой функции описаны ниже -
Sr. No. | Параметр и описание |
---|---|
1 | Source Это исходное изображение. |
2 | Text Это текстовая строка, которая появится на изображении. |
3 | Point Это точка, в которой на изображении должен отображаться текст. |
4 | fontFace Тип шрифта. Например - FONT_HERSHEY_SIMPLEX, FONT_HERSHEY_PLAIN, FONT_HERSHEY_COMPLEX и т. Д. |
5 | fontScale Коэффициент масштабирования шрифта умножается на базовый размер шрифта. |
6 | color Это цвет текста. |
Помимо метода putText, есть другие методы, предоставляемые классом Core. Они кратко описаны -
Sr. No. | Метод и описание |
---|---|
1 | normalize(Mat src, Mat dst, double alpha, double beta, int norm_type) Он нормализует норму или диапазон значений массива. |
2 | perspectiveTransform(Mat src, Mat dst, Mat m) Выполняет перспективное матричное преобразование векторов. |
3 | phase(Mat x, Mat y, Mat angle) Он вычисляет угол поворота 2D-векторов. |
4 | rectangle(Mat img, Point pt1, Point pt2, Scalar color) Он рисует простой, толстый или заполненный прямоугольник вправо. |
5 | reduce(Mat src, Mat dst, int dim, int rtype, int dtype) Он сводит матрицу к вектору. |
6 | transform(Mat src, Mat dst, Mat m) Он выполняет матричное преобразование каждого элемента массива. |
пример
В следующем примере демонстрируется использование класса Core для применения текстового водяного знака к изображению.
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());
}
}
}
Вывод
Когда вы выполняете данный код, виден следующий вывод -
Исходное изображение
Текст с водяными знаками
Применение водяного знака к изображению
Мы собираемся использовать OpenCV функция addWeightedприменить водяной знак изображения к изображению. Его можно найти вCoreпакет. Его синтаксис приведен ниже -
Core.addWeighted(InputArray src1, alpha, src2 (Watermark image), beta, gamma, OutputArray dst);
Параметры этой функции описаны ниже -
Sr. No. | Параметр и описание |
---|---|
1 | src1 Это первый входной массив. |
2 | alpha Это вес первых элементов массива. |
3 | src2 Это второй входной массив того же размера и номера канала, что и src1. |
4 | beta Это вес вторых элементов массива. |
5 | gamma Это скаляр, добавленный к каждой сумме. |
6 | dst Это выходной массив, который имеет тот же размер и количество каналов, что и входные массивы. |
пример
В следующем примере демонстрируется использование класса Core для применения водяного знака изображения к изображению.
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());
}
}
}
Вывод
Когда вы выполняете данный код, виден следующий вывод -