2017-03-09 4 views
0

opencvのinRange関数を使用してHSV色空間でカラー画像を二値化したかったのです。rangleを使って色相の大きな変化を処理する方法

一部のRGB値では、色相値が大幅に変化することがわかりました。例えば、 1)RGB値:56、40、39、そのHSV値:2、77、56 2)RGB値:56、40、41、そのHSV値:178、73、56

したがって、この場合、両方のRGBの色は非常に近く、似ていますが、色相の値には大きな違いがあります。色相の範囲を2から178まで2値化するのは間違いです。

しきい値範囲を使用してHSVカラースペースで二値化してイメージを作成する正しい方法は何でしょうか。

+0

@Mikiはここに優れた答えを持っています... http://stackoverflow.com/a/32523532/2836621 –

答えて

1

HSV表現のH成分は、クロック上の数字のように、標準的な範囲が[0、360]([0,1]のような他のオプションがあります) 0,180)、あなたのケースでは、[0,180]がucharの範囲に収まるようになります)。

あなたが望むものを達成する最も簡単な方法は、画像ピクセルを繰り返し処理することです.2つの条件((h > 170) || (h < 10)など)をチェックし、これが真であるかどうかによってバイナリ値を割り当てます。

あなたの値を使って円を描き、どの範囲をカバーしたいのか、どのような表現を使用するべきかを確認すると役に立ちます。

+0

返信ありがとうございました... –

+0

あなたは、最低値と最高値の間の距離をチェックする必要があります2つの方法で。 1)時計回りと2)反時計回り。最後に距離を最小にすると、その範囲を考慮する必要があります。例えば低い色相= 20、高い色相= 150であり、時計回りの距離は130であり、アンチロックの距離は(180-150)+20 = 50である。この場合、h> 150 || h <20. –

+0

必ずしもそうではありません。必要なサークルのセクタを決めるのはあなた次第ですが、それよりも小さくする必要はありません。 – alexisrozhkov

関連する問題