如何屏蔽绿色像素?

时间:2012-09-10 07:15:13

标签: image-processing opencv computer-vision emgucv

我需要屏蔽图像中的绿色像素。 我有掩蔽红色像素的例子。 这里的例子是:

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)

知道我必须采取哪些参数来掩盖绿色像素? 提前谢谢。

1 个答案:

答案 0 :(得分:3)

代码屏蔽Hue超出范围20 - 160的像素(或者更确切地说掩盖范围内的像素,然后反转遮罩)。

首先,了解HSV(色调,饱和度,值):http://en.wikipedia.org/wiki/HSL_and_HSV

实际的Hue是度,从0到360,如:

Hue angles

然后看OpenCV documentation on 8-bit HSV format

首先在0 - 360中计算Hue,然后除以2以适合8位整数。

这意味着在原始示例中,蒙板像素的实际色调低于40或高于320度。显然是0度加/减40。

对于类似的绿色范围,您需要120 +/- 40,即从80到160.最后将其转换为8位表示 - 从40到80。

实际代码与您的样本有所不同:对于红色,他们必须屏蔽20,160然后反转掩码。对于绿色,从40到80的掩蔽就足够了(即你必须省略channels[0]._Not();部分)。