Opencv-sobel-operator

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

OpenCV-ソーベル演算子

  • sobel操作*を使用すると、水平方向と垂直方向の両方で画像のエッジを検出できます。 メソッド* sobel()*を使用して、画像にsobel操作を適用できます。 以下は、このメソッドの構文です-
Sobel(src, dst, ddepth, dx, dy)

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

  • src -ソース(入力)画像を表すクラス Mat のオブジェクト。
  • dst -宛先(出力)イメージを表すクラス Mat のオブジェクト。
  • ddepth -画像の深さを表す整数変数(-1)
  • dx -x導関数を表す整数変数。 (0または1)
  • dy -y導関数を表す整数変数。 (0または1)

次のプログラムは、特定の画像でSobel操作を実行する方法を示しています。

import org.opencv.core.Core;
import org.opencv.core.Mat;

import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;

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

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

     //Applying sobel on the Image
      Imgproc.Sobel(src, dst, -1, 1, 1);

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

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

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

ウィンドウ入力

出力

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

Image Processed

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

Sobel Output

ソーベルバリアント

最後に異なる値をパラメータ(dxとdy)(0と1の間)に渡すと、異なる出力が得られます-

//Applying sobel on the Image
Imgproc.Sobel(src, dst, -1, 1, 1);

次の表に、メソッド* Sobel()の変数 *dx および dy のさまざまな値と、それぞれの出力を示します。

X-derivative Y-derivative Output
0 1 Sobel 01
1 0 Sobel 10
1 1 Sobel 11