В этой главе мы изучаем два способа нанесения водяных знаков на изображения. Эти способы —
- Применение текстового водяного знака
- Применение изображения водяного знака
Применение текстового водяного знака
Мы используем функцию 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()); } } }
Выход
Когда вы выполняете данный код, вы увидите следующий вывод:
Исходное изображение
Текст с водяным знаком
Нанесение водяного знака на изображение
Мы собираемся использовать функцию 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()); } } }
Выход
Когда вы выполняете данный код, вы увидите следующий вывод: