2017-01-21 29 views
-1

このコードは、dx = 1、dy = 0かつdx = 0、dy = 1である。 これは、gradYgradXから差し引くことができないため、黒い画像が表示されるためです。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を使用しています。

+0

カーネルサイズ= -1?それは正しいとは思わない – Miki

+0

[OpenCVのドキュメント](http://docs.opencv.org/3.2.0/d4/d86/group__imgproc__filter.html#gacea54f142e81b6758cb6f375ce782c8d)によると、 'ksize = -1'の値は、 Scharrフィルタ。 'ksize'の他の値を使用することは重要ではないようです。 XとYのグラジエントは常に同じです。 –

答えて

0

この問題は修正されました。

OpenCVライブラリは、Androidスマートフォンで2つの方法で使用できます。アプリケーション内に直接埋め込むことも、アプリケーションとしてインストールすることもできます。 - OpenCV Managerは、OpenCVアプリケーションにライブラリを動的に提供します。

私のアプリケーションは、OpenCV Managerアプリケーションを使用してライブラリを取得していました。残念ながら、Android用のOpenCV Managerは盗聴されているようです。なぜなら、OpenCVライブラリをアプリケーション内に直接埋め込むと、Sobelの呼び出しが正しく機能するようになったからです。

だから私は皆さんのアプリケーションをOpenCVに静的にリンクすることをお勧めします。

関連する問題