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(Hue、Saturation、Value):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 回答