Java DIP - 应用水印


在本章中,我们学习两种在图像上应用水印的方法。这些方法是 -

  • 应用文本水印
  • 应用图像水印

应用文本水印

我们使用OpenCV函数putText将文本水印应用于图像。它可以在Core包下找到。其语法如下 -

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

该函数的参数描述如下 -

先生。 参数及说明
1

来源

这是源图像。

2

文本

它是出现在图像上的字符串文本。

3

观点

这是文本应该出现在图像上的点。

4

字体

字体类型。例如 - FONT_HERSHEY_SIMPLEX、FONT_HERSHEY_PLAIN、FONT_HERSHEY_COMPLEX 等。

5

字体比例

它是字体比例因子乘以特定于字体的基本尺寸。

6

颜色

是文字颜色。

除了 putText 方法之外,Core 类还提供了其他方法。它们被简要描述 -

先生。 方法及说明
1

归一化(Mat src,Mat dst,双阿尔法,双贝塔,intnorm_type)

它规范化数组的范数或值范围。

2

透视变换(Mat src,Mat dst,Mat m)

它执行向量的透视矩阵变换。

3

相位(Mat x、Mat y、Mat 角)

它计算二维向量的旋转角度。

4

矩形(Mat img、点 pt1、点 pt2、标量颜色)

它绘制一个简单的、粗的或填充的直角矩形。

5

减少(Mat src,Mat dst,int dim,int rtype,int dtype)

它将矩阵简化为向量。

6

变换(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);

该函数的参数描述如下 -

先生。 参数及说明
1

源1

它是第一个输入数组。

2

α

它是第一个数组元素的权重。

3

源2

它是与 src1 具有相同大小和通道号的第二个输入数组。

4

贝塔

它是第二个数组元素的权重。

5

伽玛

它是添加到每个和的标量。

6

目的地

它是与输入数组具有相同大小和通道数的输出数组。

例子

以下示例演示了如何使用 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());
      }
   }
}

输出

当您执行给定的代码时,会看到以下输出 -

原始图像

应用水印教程

水印图像

应用水印教程

带水印的图像

应用水印教程