Opencv-simple-threshold

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

OpenCV-単純なしきい値

しきい値処理は、画像のセグメンテーションの方法であり、一般に、バイナリ画像の作成に使用されます。 しきい値処理には、単純なしきい値処理と適応しきい値処理の2種類があります。

単純なしきい値処理

単純なしきい値操作では、指定されたしきい値より大きい値を持つピクセルに標準値が割り当てられます。

  • Imgprocクラス*のメソッド* threshold()*を使用して、画像に対して簡単なしきい値操作を実行できます。このメソッドの構文は次のとおりです。
threshold(src, dst, thresh, maxval, type)

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

  • src -ソース(入力)画像を表すクラス Mat のオブジェクト。
  • dst -宛先(出力)イメージを表すクラス Mat のオブジェクト。
  • thresh -しきい値を表すdouble型の変数。
  • maxval -ピクセル値がしきい値よりも大きい場合に与えられる値を表すdouble型の変数。
  • type -使用されるしきい値のタイプを表す整数タイプの変数。

次のプログラムは、OpenCVの画像で単純なしきい値処理を実行する方法を示しています。

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

public class Thresh {
   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/chap14/thresh_input.jpg";
      Mat src = Imgcodecs.imread(file);

     //Creating an empty matrix to store the result
      Mat dst = new Mat();
      Imgproc.threshold(src, dst, 50, 255, Imgproc.THRESH_BINARY);

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

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

上記のプログラムで指定された入力画像 thresh_input.jpg が次のものであると仮定します。

Thresh Input

出力

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

Image Processed

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

Thresh Output

他のタイプの単純なしきい値処理

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

それぞれの事前定義値を* threshold()メソッドの *type という名前のパラメーターに渡すことで、必要なしきい値操作のタイプを選択できます。

Imgproc.threshold(src, dst, 50, 255, Imgproc.THRESH_BINARY);

以下は、さまざまなタイプのしきい値操作とそれぞれの出力を表す値です。

Operation and Description Output
THRESH_BINARY THRESH_BINARY
THRESH_BINARY_INV THRESH_BINARY_INV
THRESH_TRUNC THRESH_TRUNC
THRESH_TOZERO THRESH_TOZERO
THRESH_TOZERO_INV THRESH_TOZERO_INV