Java-dip-applying-watermark

提供:Dev Guides
移動先:案内検索

Java DIP-透かしの適用

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

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

テキスト透かしの適用

*OpenCV* 関数 *putText* を使用して、画像にテキストの透かしを適用します。 *Core* パッケージの下にあります。 その構文は以下のとおりです-
Core.putText(source, Text, Point, fontFace ,fontScale , color);

この関数のパラメータは以下に説明されています-

Sr.No. Parameter & Description
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. Method & Description
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, "finddevguides.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. Parameter & Description
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());
      }
   }
}

出力

あなたが与えられたコードを実行すると、次の出力が見られます-

元画像

WaterMarkチュートリアルの適用

透かし画像

WaterMarkチュートリアルの適用

透かし画像

WaterMarkチュートリアルの適用