Opencv-morphological-operations

提供:Dev Guides
移動先:案内検索

OpenCV-モルフォロジー操作

前の章で、侵食*と*膨張*のプロセスについて説明しました。 これら2つに加えて、OpenCVにはより多くの形態変換があります。 クラス *Imgproc のメソッドの* morphologyEx()*は、特定の画像でこれらの操作を実行するために使用されます。

以下は、このメソッドの構文です-

morphologyEx(src, dst, op, kernel)

このメソッドは、次のパラメータを受け入れます-

  • src -ソース(入力)画像を表すクラス Mat のオブジェクト。
  • dst -宛先(出力)イメージを表すクラス Mat のオブジェクト。
  • op -形態学的操作のタイプを表す整数。
  • kernel -カーネル行列。

次のプログラムは、OpenCVライブラリを使用して画像にモルフォロジー演算 "top-hat" を適用する方法を示しています。

import org.opencv.core.Core;
import org.opencv.core.CvType;
import org.opencv.core.Mat;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;

public class MorphologyExTest {
   public static void main(String args[]) {
     //Loading the OpenCV core library
      System.loadLibrary( Core.NATIVE_LIBRARY_NAME );

     //Reading the Image from the file and storing it in to a Matrix object
      String file ="E:/OpenCV/chap12/morph_input.jpg";
      Mat src = Imgcodecs.imread(file);

     //Creating an empty matrix to store the result
      Mat dst = new Mat();

     //Creating kernel matrix
      Mat kernel = Mat.ones(5,5, CvType.CV_32F);

     //Applying Blur effect on the Image
      Imgproc.morphologyEx(src, dst, Imgproc.MORPH_TOPHAT, kernel);

     //Writing the image
      Imgcodecs.imwrite("E:/OpenCV/chap12/morph_tophat.jpg", dst);

      System.out.println("Image Processed");
   }
}

上記のプログラムで指定された入力画像 morph_input.jpg が次のように仮定します。

モーフ入力

出力

プログラムを実行すると、次の出力が得られます-

Image Processed

指定したパスを開くと、次のように出力画像を観察できます-

モーフ出力

その他の操作

OpenCVは、前の*例*で示した形態学的操作 TOPHAT に加えて、他のさまざまな種類の形態に対応しています。 これらのタイプはすべて、 Imgproc クラスの事前定義された静的フィールド(固定値)で表されます。

それぞれの事前定義された値を* morphologyEx()メソッドのパラメーター *op に渡すことで、必要な形態のタイプを選択できます。

//Applying Blur effect on the Image
Imgproc.morphologyEx(src, dst, Imgproc.MORPH_TOPHAT, kernel);

モルフォロジー演算のタイプとそれぞれの出力を表す値は次のとおりです。

Operation and Description Output
MORPH_BLACKHAT MORPH_BLACKHAT
MORPH_CLOSE MORPH_CLOSE
MORPH_CROSS MORPH_CROSS
MORPH_DILATE MORPH_DILATE
MORPH_ELLIPSE MORPH_ELLIPSE
MORPH_ERODE MORPH_ERODE
MORPH_GRADIENT MORPH_GRADIENT
MORPH_OPEN MORPH_OPEN
MORPH_RECT MORPH_RECT
MORPH_TOPHAT MORPH_TOPHAT