Java-dip-applying-watermark
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());
}
}
}
出力
あなたが与えられたコードを実行すると、次の出力が見られます-
元画像
テキスト透かし画像
画像に画像透かしを適用する
*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());
}
}
}
出力
あなたが与えられたコードを実行すると、次の出力が見られます-