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
指定したパスを開くと、次のように出力画像を観察できます-
ソーベルバリアント
最後に異なる値をパラメータ(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 |