OpenCVで画像をマスキングするとは?filter2D()を使ったフィルタリングの基本と実装例
OpenCVにおけるマスキング(フィルタリング)とは
マスク処理(Mask Operation)とは、あらかじめ用意したマスク行列(カーネル)に基づいて、画像内の各ピクセルの値を再計算する処理のことです。この手法は一般にフィルタリングとも呼ばれています。
OpenCVでは、Imgprocクラスのfilter2D()メソッドを使うことで、簡単にマスキングやフィルタリングを実現できます。このメソッドは、入力画像(ソース)、出力画像(デスティネーション)、そしてカーネル行列の3つを引数として受け取り、ソース行列とカーネル行列の畳み込み演算を行います。
主な用途
- シャープ化(輪郭を強調)
- ぼかし処理(平滑化)
- エッジ検出
実装例:Javaでfilter2D()を使う
以下は、2種類のカーネルを使って画像をフィルタリングするJavaのサンプルコードです。
import org.opencv.core.Core;
import org.opencv.core.CvType;
import org.opencv.core.Mat;
import org.opencv.highgui.HighGui;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;
public class MaskingExample {
public static void main( String[] args ) {
// OpenCVのコアライブラリを読み込む
System.loadLibrary( Core.NATIVE_LIBRARY_NAME );
// 入力画像を読み込む
String file = "D://images//boy.jpg";
Mat src = Imgcodecs.imread(file);
// 結果を格納する空の行列を作成
Mat dst = new Mat();
// カーネル1を作成(シャープ化用)
Mat kernel1 = new Mat(3, 3, CvType.CV_8S);
int row = 0, col = 0;
kernel1.put(row, col, 0, -1, 0, -1, 5, -1, 0, -1, 0);
// カーネル2を作成(平均化・ぼかし用)
Mat kernel2 = Mat.ones(2, 2, CvType.CV_32F);
for(int i = 0; i < kernel2.rows(); i++) {
for(int j = 0; j < kernel2.cols(); j++) {
double[] m = kernel2.get(i, j);
for(int k = 1; k < m.length; k++) {
m[k] = m[k] / (2 * 2);
}
kernel2.put(i, j, m);
}
}
// カーネル1で画像をフィルタリング
Imgproc.filter2D(src, dst, -1, kernel1);
HighGui.imshow("Mask Example1", dst);
dst = new Mat();
// カーネル2で画像をフィルタリング
Imgproc.filter2D(src, dst, -1, kernel2);
HighGui.imshow("Mask Example2", dst);
HighGui.waitKey();
}
}コードのポイント
- kernel1:中心が5、周囲が-1の3×3行列で、シャープ化フィルタとして機能します。画像の輪郭がくっきりと強調されます。
- kernel2:全要素が1/4の2×2行列で、平均化フィルタ(ぼかし)として機能します。画像全体がなめらかになります。
入力画像

実行結果
上記プログラムを実行すると、以下のようなウィンドウが表示されます。
カーネル1(シャープ化)の結果:
カーネル2(ぼかし)の結果:
まとめ
OpenCVのfilter2D()メソッドを使えば、カーネル行列を変えるだけでシャープ化やぼかしなど、さまざまな画像処理を柔軟に実装できます。マスキングの仕組みを理解することは、より高度な画像処理技術への第一歩となるでしょう。
-
OpenCVで画像に楕円を描画する方法|cv2.ellipse()の使い方を解説
この記事では、Pythonの画像処理ライブラリ「OpenCV」を使って、画像の上に楕円を描画する方法を解説します。楕円の描画には、OpenCVが提供する cv2.ellipse() 関数を使用します。元画像アルゴリズム(処理の手順)楕円を描画するまでの流れは、以下の手順になります。ステップ1: cv2 をインポートする。 ステップ2: imread() で画像を読み込む。 ステップ3: 楕円の中心座標を設定する。 ステップ4: 楕円の長軸・短軸の長さ(axesLength)を設定する。 ステップ5: 楕円の回転角度(angle)を設定する。 ステップ6: 描画を開始する角度と終了する角度を設定
-
OpenCVを使って画像に線を描画する方法
この記事では、OpenCVのcv2.line()関数を使用して、画像にシンプルな線を描画する方法を解説します。線の始点・終点・太さ・色を自由に指定できるので、図形の描画や注釈の追加など、さまざまな場面で活用できます。 元画像 処理の流れ(アルゴリズム) ステップ1:cv2をインポートする。 ステップ2:imread()で画像を読み込む。 ステップ3:image.shapeメソッドで画像のサイズ(高さ・幅・チャンネル数)を取得する。 ステップ4:線の始点を定義する。 ステップ5:線の終点を定義する。 ステップ6:線の太さを定義する。 ステップ7:cv2.line()関数で線を描画し、ステップ3