如何确定给定的RGB颜色是否在已知颜色范围内?

3
以下是一些代码,希望能够演示我尝试做的事情:
def check_color(color):

    green_start = (40, 40, 40)
    green_end   = (70, 70, 70)

    if color > green_start and color < green_end:
        return True

    return False

if check_color((60, 50, 60)):
    print 'the color is "green"'

使用 PIL,我正在尝试检测给定的颜色是否为“绿色”(在此示例中)。颜色以(R,G,B)元组的形式提供。
我应该如何执行比较?

1
40、40、40 和 70、70、70(其中 r=g=b)肯定不是绿色的。 - ThiefMaster
我的虚构范围只是为了举例使用。 - dave
4个回答

3

将RGB值转换为另一种颜色模型,例如HSV,并比较色调可能会有所帮助。


2
您可以为颜色设置截止点。RGB颜色由3个值表示,它们告诉我们混合多少红、绿和蓝色以形成该颜色。您需要决定哪些混合比例符合特定颜色。
例如,您可以说只要绿色和蓝色的值小于红色值的一半,那么颜色就是红色。例如:(r = 100, g = 49, b = 49) 是红色,但 (r = 100, g = 49, b = 50) 不是,因为50不小于红色100的一半。同样地,(r = 50, g = 23, b = 24) 也是红色。您也可以将相同规则应用于绿色和蓝色。
伪代码如下:
def get_color(color)
    r,g,b = color
    if g < r/2 and b < r/2
        return "red"
    if r < g/2 and b < g/2
        return "green"
    if r < b/2 and g < b/2
        return "blue"

这仅涵盖了红色、绿色和蓝色,您需要调整规则以适应您的需求。您还可以制定其他规则来查找其他颜色,如黄色或紫色等...


1
你可以尝试分别检查每个颜色组件:
return all(s <= c <= e for c, s, e in zip(color, green_start, green_end))

{{link1:ideone}}


看起来这正是我需要的,谢了!现在我只需要找到我的色彩范围。 - dave

0

这可能会对你有所帮助:

tuple1 = (1,2,3)
tuple2 = (1,2,4)

print (tuple1 == tuple2)    # False

print (tuple1 < tuple2)      # True

print (tuple1 > tuple2)      # False

https://howtodoinjava.com/python/compare-tuples/中有更多的示例。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接