2016-06-01 13 views
0

I持って、次の特定のOpenCVの関数で前処理し、画像化:私はこれで(各色のレンガの数を取得しようとしているOpenCVの(Java)の右HSV色INRANGEを取得

Different colored lego bricks

1色ごとにケース1)。これらは私が持っているすべての色です。

私の計画は、すべての色をループにした「INRANGE」OpenCVの機能を使用して領域のサイズを取得します。私の問題は、さまざまな色を認識することです。私は赤い色を試して、良い範囲を見つけるのに苦労した。私が理解しているGoogleに質問した後、HSV色を使用して、色相値で良好な範囲を取得する必要があります。

だから私は(何らかの理由でJavaで)このコードを書いた:この後

Mat img; //img is given from previos code 
Mat hsv = img.clone(); 
Imgproc.cvtColor(img, hsv, Imgproc.COLOR_BGR2HSV); 

を私は別の色を得ることが可能な画像を、と考えられています。実際、私はこの得た:色がほとんど破壊されたこの画像では

Weird HSV image

を...赤と緑の光は同じと他の色があまりにも完全に異なっている見えます。

今、私の質問:間違っ ドI何か?レゴレンガの色を区別することは可能ですか?これを達成するために私は何ができますか?私はOpenCV 3.1.0 for Javaを使用しています。

おかげでたくさん、 デニス

+1

は[こちら](http://stackoverflow.com/a/31465462/5008845) – Miki

+0

@Mikiのおかげで外観を持っていますが、これは私のために動作しません。たとえば:私は青を取得しようとします。答えは "青は120 + 15の感覚"です。しかし、HSV画像では、青はありません(RGB画像には青いレンガが2つあります)。私の問題は、HSV変換がすべての色を壊し、正しい色を得ることができないということです。たとえば、青色は青色のボードと右(黒色)領域にあります。 – Dentastic

答えて

1

は、私は私のミスを発見し、私はそれを誇りに思っていませんよ。それは単純なタイプミスでした。これと@Mikiの助けを借りて私の色を見つけることができます。

私のミス:

Mat img; //img is given from previos code 
Mat hsv = img.clone(); 
Imgproc.cvtColor(img, hsv, Imgproc.COLOR_BGR2HSV);  
Core.inRange(img, lowerBlue, upperBlue, hsv); //img 

代わりの

実際に
Mat img; //img is given from previos code 
Mat hsv = img.clone(); 
Imgproc.cvtColor(img, hsv, Imgproc.COLOR_BGR2HSV);  
Core.inRange(hsv, lowerBlue, upperBlue, hsv); //hsv 

...私は)HSVにイメージを翻訳し、INRANGE(RGB用の写真を撮りました。

おかげ

関連する問題