このコードは、dx = 1、dy = 0かつdx = 0、dy = 1である。 これは、gradY
をgradX
から差し引くことができないため、黒い画像が表示されるためです。OpenCV:Sobel演算子を使用する:dx = 1、dy = 0は、dx = 0、dy = 1と全く同じ出力を返します(バグ?)
これはOpenCVのバグですか?コードが間違っていますか?
入力画像は、スマートフォンのカメラから取得した画像です。
Mat gradX = new Mat();
Mat gradY = new Mat();
Mat gray = new Mat();
Mat gradient = new Mat()
Imgproc.cvtColor(cameraSnapshotFrame, gray, COLOR_BGR2GRAY);
Imgproc.Sobel(gray, gradX, CV_32F, 1, 0, -1, 1.0, 0);
Imgproc.Sobel(gray, gradY, CV_32F, 0, 1, -1, 1.0, 0); // for some reason this gives the same result as the line above
Core.subtract(gradX, gradY, gradient);
Core.convertScaleAbs(gradient, gradient); // gradient is an empty black image
私はAndroid用OpenCVバージョン3.1.0を使用しています。
カーネルサイズ= -1?それは正しいとは思わない – Miki
[OpenCVのドキュメント](http://docs.opencv.org/3.2.0/d4/d86/group__imgproc__filter.html#gacea54f142e81b6758cb6f375ce782c8d)によると、 'ksize = -1'の値は、 Scharrフィルタ。 'ksize'の他の値を使用することは重要ではないようです。 XとYのグラジエントは常に同じです。 –