我需要屏蔽图像中的绿色像素。 我有掩蔽红色像素的例子。 这里的例子是:
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)
知道我必须采取哪些参数来掩盖绿色像素? 提前谢谢。
答案 0 :(得分:3)
代码屏蔽Hue超出范围20 - 160的像素(或者更确切地说掩盖范围内的像素,然后反转遮罩)。
首先,了解HSV(色调,饱和度,值):http://en.wikipedia.org/wiki/HSL_and_HSV
实际的Hue是度,从0到360,如:
然后看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();
部分)。