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);
}
}コードの解説
- ライブラリのロード: System.loadLibrary()でOpenCVのネイティブライブラリを読み込みます。
- 画像の読み込み: Imgcodecs.imread()メソッドで2枚の入力画像を読み込みます。
- ブレンド処理: addWeighted()に重み0.4と0.8を指定して加重平均を計算します。
- 結果の表示: HighGui.imshow()で結果画像を表示し、waitKey(0)でキー入力待ちの状態にします。
実行結果
このプログラムを実行すると、2枚の入力画像が指定した重みで合成され、1枚のブレンド画像として表示されます。
入力画像1

入力画像2

出力画像

まとめ
OpenCV Javaで画像をブレンドするには、CoreクラスのaddWeighted()メソッドを使うのが最もシンプルです。alphaとbetaの値を調整することで、どちらの画像を強調するかを自由に制御できるため、画像のフェードイン・フェードアウト効果や透かし(ウォーターマーク)の作成などにも応用できます。
-
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の例
-
JavaとOpenCVライブラリを使って画像を保存(書き出し)する方法
OpenCVライブラリを利用すると、画像フィルタリング、幾何学的変換、色空間の変換、ヒストグラム処理など、さまざまな画像処理操作を行うことができます。本記事では、その中でも基本的な操作である「画像の読み込みと保存(書き出し)」の方法を解説します。画像を書き出す(保存する)方法Imgcodecsクラスのimread()メソッドを使って画像を読み込むと、その内容はMat(Matrix)オブジェクトに格納されます。読み込んだ画像をファイルとして保存するには、imwrite()メソッドを使用します。imwrite()メソッドは、以下の2つの引数を受け取ります。file:保存先のファイルパスを表す文字列