OpenCVで学ぶJavaによる画像侵食(エロージョン)処理の実装例
モルフォロジー演算とは
侵食(エロージョン)と膨張(ダイレーション)は、モルフォロジー演算における2つの基本操作です。その名の通り、モルフォロジー演算とは、画像をその形状に基づいて処理するための一連の操作を指します。
侵食処理の仕組み
侵食処理では、画像の境界部分から余分なピクセルが取り除かれます。侵食プロセスで除去されるピクセルの総数は、使用する構造要素(カーネル)のサイズによって決まります。
erode()メソッドの使い方
OpenCVでは、Imgprocクラスのerode()メソッドを使用することで、画像に侵食処理を適用できます。このメソッドは、ソース画像・出力先画像・カーネルを表す3つのMatオブジェクトを引数として受け取ります。
サンプルコード
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.IOException;
import javafx.application.Application;
import javafx.embed.swing.SwingFXUtils;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.image.ImageView;
import javafx.scene.image.WritableImage;
import javafx.stage.Stage;
import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.core.Size;
import org.opencv.highgui.HighGui;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;
public class ImageErosion extends Application {
public void start(Stage stage) throws IOException {
// OpenCVのコアライブラリを読み込む
System.loadLibrary( Core.NATIVE_LIBRARY_NAME );
// 画像データを読み込む
String file ="D:\\Images\\lamma2.jpg";
Mat src = Imgcodecs.imread(file);
// 出力先の行列を作成
Mat dst = new Mat(src.rows(), src.cols(), src.type());
// カーネル(構造要素)オブジェクトを準備
Mat kernel = Imgproc.getStructuringElement(Imgproc.MORPH_RECT, new Size((2*2) + 1, (2*2)+1));
// 画像に侵食処理を適用
Imgproc.erode(src, dst, kernel);
// 行列をJavaFXの書き込み可能イメージに変換
Image img = HighGui.toBufferedImage(dst);
WritableImage writableImage= SwingFXUtils.toFXImage((BufferedImage) img, null);
// イメージビューを設定
ImageView imageView = new ImageView(writableImage);
imageView.setX(10);
imageView.setY(10);
imageView.setFitWidth(575);
imageView.setPreserveRatio(true);
// シーンオブジェクトを設定
Group root = new Group(imageView);
Scene scene = new Scene(root, 595, 400);
stage.setTitle("Erosion Example");
stage.setScene(scene);
stage.show();
}
public static void main(String args[]) {
launch(args);
}
}入力画像

実行結果
上記のプログラムを実行すると、以下のような出力が得られます。

-
OpenCVとJavaFXで画像の明るさを下げる方法:convertTo()メソッドの実装例
Javaで画像の明るさを変更する方法の一つとして、OpenCVのconvertTo()メソッドを使う手法があります。このメソッドは、指定された行列(Mat)に対して必要な計算を実行し、画像のコントラストや明るさを調整します。convertTo()メソッドは以下の4つのパラメータを受け取ります。mat − 結果を格納するための空の行列。元の行列と同じサイズ・型である必要があります。rtype − 出力行列の型を指定する整数値。負の値を指定した場合、出力行列の型は元の行列と同じになります。alpha − ゲイン値。0より大きい値である必要があります(デフォルト値は1)。beta − バイアス値(デ
-
JavaとOpenCVライブラリを使って画像内の顔を検出する方法
JavaでOpenCVを使用して画像から顔を検出するには、CascadeClassifierクラスを利用します。このクラスは、分類器ファイル(カスケードファイル)を読み込み、画像内から目的のオブジェクト(ここでは顔)を検出する役割を担います。 CascadeClassifierクラスとは CascadeClassifierは、OpenCVが提供する物体検出用のクラスです。事前に学習済みのカスケード分類器(XMLファイル)を読み込むことで、顔や人など特定のパターンを画像から認識できます。 detectMultiScale()メソッドについて このクラスが持つdetectMultiScale(