2011-11-06 9 views
1

私はルービックキューブEmguCV色彩認識

のオフ色を検出するためのプログラムを作成しようとしているが、私は、これまで実行しているかのスクリーンショットのthats、私は基本的にエッジ検出の例からコードを使用しましたそれはemguCVと一緒に出荷され、小さなキューブを検出するために使用されます(しかし、小さなキューブのいくつかは検出されませんが、私がここで議論したい問題はありません)。

今、小さなキューブがある場所を発見した後、私は現在、私はそうのように、色を決定するHSV値を使用しています、彼らはどの色を検出します:

if (current_colour.Hue > 120 && current_colour.Hue < 170) 
{ 
    Colours[(int)colornames.W]++; 
} 
else if (current_colour.Hue > (170)) 
{ 
    Colours[(int)colornames.R]++; 
} 
else if (current_colour.Hue > 5 && current_colour.Hue < 20) 
{ 
    Colours[(int)colornames.O]++; 
} 
else if (current_colour.Hue > 47 && current_colour.Hue< 60) 
{ 
    Colours[(int)colornames.G]++; 
} 
else if (current_colour.Hue > 15 && current_colour.Hue < 30) 
{ 
    Colours[(int)colornames.Y]++; 
} 
else if (current_colour.Hue > 100 && current_colour.Hue < 110) 
{ 
    Colours[(int)colornames.B]++; 
} 

どこ値について私が試行錯誤して得た各色... Photoshopを使って...私は、(特に白と赤の)混乱している結果を得るImとして、より良い方法があるはずだと確信しています 助けてください?

+0

こんにちは、GetAverageはROIの平均値を生成する平均色または個々のピクセルを生成するために四角形内のすべてのデータを使用していますか?より良い結果を得るには、彩度と値を使用します。理想的な世界では白が(255,255,255)と赤(0,0,255)になるため、Bgrなどの他のイメージタイプを使用して結果を確認することもできます。あなたがしていることが本当に面白い素敵な仕事だと言ってもいいですか?私は助けることができると希望 – Chris

+0

ちょっとクリス、私は単一のピクセルを使用していましたが、私は正方形内の複数の(約9または10)ピクセルの平均を取ることを考えています(自分の関数を書くことによって)GetAverareageは私のためにこれをしなさい(私はそれをgoogledしかし何も見つけなかった)。 – 7VoltCrayon

+0

こんにちは、はいそれはすべてROIを取り、各ピクセルを加算してピクセル数で割ることで、独自の関数を書くのも簡単です。私は、画像のエンコードと圧縮のおかげで騒音はほとんどないので、エッジの近くに黒があると、1つのピクセルでメインエラーが発生することが予想されます。私は四角いセンターを取ってそこから作業することをお勧めします。 Cheers – Chris

答えて

3

画像があなたの例のように簡単な場合は、画像にヒストグラムを付けることができます。ヒストグラムのピークは、使用する色に対応します。

ヒストグラムを3つ作成するか、お互いに十分遠くにある10個(またはそれ以上)のビン値をとり、色があります。

関連する問題