1

我需要检查从非常浅的粉红色到深紫色的色标中是否包含像素(RGB)。使用 RGB 方案我可以做这样的检查:

IF image [x, y] [R]> threshold and image [x, y] [G]> threshold image [x, y] [B]> threshold and \
     image [x, y] [R] <threshold and image [x, y] [G] < threshold image [x, y] [B] <threshold THAN ...

?

如果没有,我也可以选择在 HSV 中使用像素。

谢谢!

4

3 回答 3

3

使用每个通道的截止值相当于在 RGB 颜色空间中指定一个轴对齐的矩形框。盒子是一种令人讨厌的形状 - 您可能必须包含一些您并不真正想要的区域(在角落)以避免排除您想要的区域(在面部的中心)。

如果您改为选择两个锚点和一个截止距离,它相当于一个任意对齐的 3d 椭圆体 - 希望它应该更准确地匹配您想要的颜色。

就像是

def colorRange(ax, ay, az, bx, by, bz, dist):
    def testPixel(cx, cy, cz):
        return (
            (cx-ax)**2 + (cy-ay)**2 + (cz-az)**2
            + (cx-bx)**2 + (cy-by)**2 + (cz-bz)**2
        ) < dist**2
    return testPixel

isPurple = colorRange(140,0,140, 255,75,255, 230)
isPurple(203,46,195)  # -> True
于 2011-03-01T21:45:56.883 回答
3

您可能想在 HSV 中工作,因为它比 RGB 更直观地映射到人类感知。如果您让人类将颜色标记为“范围内”或“范围外”,并将它们映射到 HSV 中,您将能够找到指示进出的 H、S 和 V 值的界限。

然后你可以使用一个简单的范围检查,就像你概述的那样来确定颜色是进还是出。如果您在颜色空间转换方面需要 Python 帮助,标准库模块colorsys将为您完成。

于 2011-03-01T19:46:47.240 回答
0

如果您在谈论整数 RGB 值,您可以将所有值放入 a 中set,然后简单地执行if color in set:

如果您的“颜色范围”以复杂的方式定义,那么定义一组具体的颜色可能是唯一的方法。

于 2011-03-01T19:49:04.327 回答