Java
 Computer >> コンピューター >  >> プログラミング >> Java

OpenCV Javaで画像をブレンドする方法

OpenCVでは、Coreクラスが提供するaddWeighted()メソッドを使用することで、2つの画像を簡単にブレンド(合成)できます。

このメソッドは、ソース画像とブレンド対象画像にあたる2つのMatオブジェクト、およびそれぞれの画像の重みを表すdouble型の値(alpha)とガンマ値(gamma)を引数として受け取り、それらの加重和を計算して結果を出力します。

addWeighted()メソッドの基本構文

Core.addWeighted(src1, alpha, src2, beta, gamma, dst);
  • src1 / src2: ブレンド元となる2つの画像(Matオブジェクト)
  • alpha / beta: 各画像に適用される重み。合計が1.0になるように設定すると自然なブレンドになります
  • gamma: 結果に加算されるスカラー値
  • dst: 計算結果を格納する出力用のMatオブジェクト

サンプルコード

以下は、2枚の画像を読み込んでブレンドし、結果をウィンドウに表示するJavaプログラムの完全な例です。

import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.highgui.HighGui;
import org.opencv.imgcodecs.Imgcodecs;

public class AddingTwoImages {
    public static void main(String[] args) {
        // OpenCVネイティブライブラリのロード
        System.loadLibrary(Core.NATIVE_LIBRARY_NAME);

        // 入力画像の読み込み
        Mat src1 = Imgcodecs.imread("D://images//a1.jpg");
        Mat src2 = Imgcodecs.imread("D://images//a2.jpg");

        // 結果を格納する空のMatを作成
        Mat dst = new Mat();

        // 2つの画像をブレンド
        Core.addWeighted(src1, 0.4, src2, 0.8, 0, dst);

        // 結果の表示
        HighGui.imshow("Adding two images", dst);
        HighGui.waitKey(0);
    }
}

コードの解説

  1. ライブラリのロード: System.loadLibrary()でOpenCVのネイティブライブラリを読み込みます。
  2. 画像の読み込み: Imgcodecs.imread()メソッドで2枚の入力画像を読み込みます。
  3. ブレンド処理: addWeighted()に重み0.4と0.8を指定して加重平均を計算します。
  4. 結果の表示: HighGui.imshow()で結果画像を表示し、waitKey(0)でキー入力待ちの状態にします。

実行結果

このプログラムを実行すると、2枚の入力画像が指定した重みで合成され、1枚のブレンド画像として表示されます。

入力画像1

OpenCV Javaで画像をブレンドする方法

入力画像2

OpenCV Javaで画像をブレンドする方法

出力画像

OpenCV Javaで画像をブレンドする方法

まとめ

OpenCV Javaで画像をブレンドするには、CoreクラスのaddWeighted()メソッドを使うのが最もシンプルです。alphaとbetaの値を調整することで、どちらの画像を強調するかを自由に制御できるため、画像のフェードイン・フェードアウト効果や透かし(ウォーターマーク)の作成などにも応用できます。

  1. JavaとOpenCVで2つの画像にビット単位のOR演算(bitwise_or)を行う方法

    JavaでOpenCVを利用すれば、org.opencv.core.Coreクラスが提供するbitwise_or()メソッドを使って、2つの画像間でビット単位のOR(論理和)演算を簡単に実行できます。 このメソッドは、演算対象となる2つのソース画像と、結果を格納する出力先として、合計3つのMatオブジェクトを引数に取ります。処理では各要素(ピクセル)ごとにビット単位の論理和が計算され、その結果が出力先のMatオブジェクトに格納されます。OR演算では、対応するビットのどちらか一方でも1であれば結果が1になるため、2つの画像を重ね合わせたような効果が得られます。 サンプルコード 以下のJavaの例

  2. JavaとOpenCVライブラリを使って画像を保存(書き出し)する方法

    OpenCVライブラリを利用すると、画像フィルタリング、幾何学的変換、色空間の変換、ヒストグラム処理など、さまざまな画像処理操作を行うことができます。本記事では、その中でも基本的な操作である「画像の読み込みと保存(書き出し)」の方法を解説します。画像を書き出す(保存する)方法Imgcodecsクラスのimread()メソッドを使って画像を読み込むと、その内容はMat(Matrix)オブジェクトに格納されます。読み込んだ画像をファイルとして保存するには、imwrite()メソッドを使用します。imwrite()メソッドは、以下の2つの引数を受け取ります。file:保存先のファイルパスを表す文字列