Учебники

Java DIP — применение водяных знаков

В этой главе мы изучаем два способа нанесения водяных знаков на изображения. Эти способы —

  • Применение текстового водяного знака
  • Применение изображения водяного знака

Применение текстового водяного знака

Мы используем функцию OpenCV putText для нанесения водяного знака на изображение. Его можно найти под пакетом Core . Его синтаксис приведен ниже —

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

Параметры этой функции описаны ниже —

Sr.No. Параметр и описание
1

Источник

Это исходное изображение.

2

Текст

Это текст строки, который появится на изображении.

3

точка

Это точка, где текст должен появиться на изображении.

4

fontFace

Тип шрифта. Например — FONT_HERSHEY_SIMPLEX, FONT_HERSHEY_PLAIN, FONT_HERSHEY_COMPLEX и т. Д.

5

fontScale

Это масштабный коэффициент шрифта, который умножается на базовый размер шрифта.

6

цвет

Это цвет текста.

Источник

Это исходное изображение.

Текст

Это текст строки, который появится на изображении.

точка

Это точка, где текст должен появиться на изображении.

fontFace

Тип шрифта. Например — FONT_HERSHEY_SIMPLEX, FONT_HERSHEY_PLAIN, FONT_HERSHEY_COMPLEX и т. Д.

fontScale

Это масштабный коэффициент шрифта, который умножается на базовый размер шрифта.

цвет

Это цвет текста.

Помимо метода putText, класс Core предоставляет и другие методы. Они описаны кратко —

Sr.No. Метод и описание
1

нормализовать (Mat src, Mat dst, двойная альфа, двойная бета, int norm_type)

Это нормализует диапазон норм или значений массива.

2

перспективаПреобразование (Mat src, Mat dst, Mat m)

Выполняет перспективное матричное преобразование векторов.

3

фаза (Mat x, Mat y, угол Mat)

Он рассчитывает угол поворота 2D векторов.

4

прямоугольник (Mat img, точка pt1, точка pt2, скалярный цвет)

Он рисует простой, толстый или заполненный прямоугольник справа вверх.

5

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

Это сводит матрицу к вектору.

6

преобразование (Mat src, Mat dst, Mat m)

Он выполняет матричное преобразование каждого элемента массива.

нормализовать (Mat src, Mat dst, двойная альфа, двойная бета, int norm_type)

Это нормализует диапазон норм или значений массива.

перспективаПреобразование (Mat src, Mat dst, Mat m)

Выполняет перспективное матричное преобразование векторов.

фаза (Mat x, Mat y, угол Mat)

Он рассчитывает угол поворота 2D векторов.

прямоугольник (Mat img, точка pt1, точка pt2, скалярный цвет)

Он рисует простой, толстый или заполненный прямоугольник справа вверх.

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

Это сводит матрицу к вектору.

преобразование (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());
      }
   }
}

Выход

Когда вы выполняете данный код, вы увидите следующий вывод:

Исходное изображение

Применение учебника WaterMark

Текст с водяным знаком

Применение учебника WaterMark

Нанесение водяного знака на изображение

Мы собираемся использовать функцию OpenCV addWeighted, чтобы применить к изображению водяной знак. Его можно найти под пакетом Core . Его синтаксис приведен ниже —

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

Параметры этой функции описаны ниже —

Sr.No. Параметр и описание
1

src1

Это первый входной массив.

2

альфа

Это вес первых элементов массива.

3

src2

Это второй входной массив того же размера и номера канала, что и src1.

4

бета

Это вес элементов второго массива.

5

гамма

Это скаляр, добавленный к каждой сумме.

6

ДСТ

Это выходной массив, который имеет тот же размер и количество каналов, что и входные массивы.

src1

Это первый входной массив.

альфа

Это вес первых элементов массива.

src2

Это второй входной массив того же размера и номера канала, что и src1.

бета

Это вес элементов второго массива.

гамма

Это скаляр, добавленный к каждой сумме.

ДСТ

Это выходной массив, который имеет тот же размер и количество каналов, что и входные массивы.

пример

В следующем примере демонстрируется использование класса 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());
      }
   }
}

Выход

Когда вы выполняете данный код, вы увидите следующий вывод: