0

画像の緑色のピクセルをマスクする必要があります。マスキングの赤いピクセルの例があります。ここに例があります:

Image<Hsv, Byte> hsv = image.Convert<Hsv, Byte>()

Image<Gray, Byte>[] channels = hsv.Split();

               //channels[0] is the mask for hue less than 20 or larger than 160

CvInvoke.cvInRangeS(channels[0], new MCvScalar(20), new MCvScalar(160), channels[0]);
               channels[0]._Not();

しかし、私はそれらのパラメータがどこからどこにトークンがあるのか​​理解できません:

new MCvScalar(20), new MCvScalar(160)

緑のピクセルをマスクするためにどのパラメータを使用する必要があるか考えてみてください。前もって感謝します。

4

1 に答える 1

3

このコードは、20〜160の範囲外の色相でピクセルをマスクします(または、範囲内のピクセルをマスクしてから、マスクを反転します)。

まず、HSV(色相、彩度、値)を理解します:http://en.wikipedia.org/wiki/HSL_and_HSV

実際の色相は度単位で、次のように0から360になります。

色相角

次に、8ビットHSV形式のOpenCVドキュメントを参照してください。

色相は最初に0〜360で計算され、次に2で除算されて8ビット整数に収まります。

これは、元の例では、マスクされたピクセルの実際の色相が40度未満または320度を超えていることを意味します。どうやらそれは0度プラス/マイナス40です。

同様の範囲のグリーンの場合、120 +/- 40、つまり80から160が必要です。最後に、それを8ビット表現(40から80)に変換します。

ただし、実際のコードはサンプルとは異なります。赤の場合、20,160をマスクしてから、マスクを反転する必要がありました。緑の場合、40から80までマスキングするだけで十分です(つまり、そのchannels[0]._Not();部分を省略する必要があります)。

于 2012-09-10T08:20:01.403 に答える