JavaDIP-透かしの適用

この章では、画像に透かしを適用する2つの方法を学びます。これらの方法は-

  • テキスト透かしの適用
  • 画像透かしの適用

テキスト透かしの適用

を使用しております OpenCV 関数 putText画像にテキスト透かしを適用します。それは下にありますCoreパッケージ。その構文を以下に示します-

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

この関数のパラメータを以下に説明します-

シニア番号 パラメータと説明
1

Source

ソース画像です。

2

Text

画像に表示されるのは文字列テキストです。

3

Point

これは、テキストが画像に表示されるポイントです。

4

fontFace

フォントタイプ。例-FONT_HERSHEY_SIMPLEX、FONT_HERSHEY_PLAIN、FONT_HERSHEY_COMPLEXなど。

5

fontScale

フォント固有の基本サイズを掛けたのは、フォントの倍率です。

6

color

テキストカラーです。

putTextメソッドとは別に、Coreクラスによって提供される他のメソッドがあります。それらは簡単に説明されています-

シニア番号 方法と説明
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);

この関数のパラメータを以下に説明します-

シニア番号 パラメータと説明
1

src1

最初の入力配列です。

2

alpha

これは、最初の配列要素の重みです。

3

src2

これは、src1と同じサイズとチャネル番号の2番目の入力配列です。

4

beta

これは、2番目の配列要素の重みです。

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());
      }
   }
}

出力

指定されたコードを実行すると、次の出力が表示されます-

元の画像

透かし画像

透かし入りの画像