如何确定给定的RGB颜色是否在一系列已知颜色之间?

时间:2011-01-29 09:33:48

标签: python image python-imaging-library rgb pixel

这里有一些代码可以尝试演示我正在尝试做的事情:

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)元组的形式提供。

我该如何进行比较?

4 个答案:

答案 0 :(得分:3)

将您的RGB值转换为color model之类的另一个HSV并比较Hue可能会有所帮助。

答案 1 :(得分:1)

您可以尝试单独检查每个颜色组件:

return all(s <= c <= e for c, s, e in zip(color, green_start, green_end))

ideone

答案 2 :(得分:0)

您可以选择颜色的截止点。 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"

这仅包括红色,绿色和蓝色,您可能需要调整规则以满足您的需求。您还可以制定其他规则来查找黄色或紫色等其他颜色......

答案 3 :(得分: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/

中的更多示例