如何判断一个RGB颜色是否在已知颜色范围内?

3 投票
4 回答
5418 浏览
提问于 2025-04-16 10:50

这里有一些代码,想给大家演示一下我想做的事情:

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 个回答

1

你可以试着分别检查每个颜色的组成部分:

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

ideone

2

你可以为颜色选择一些分界点。RGB颜色是通过三个数值来表示的,这三个数值分别代表红色、绿色和蓝色的混合量。你需要决定哪些混合方式被认为是某种颜色。

举个例子,你可以说,只要绿色和蓝色的值都小于红色值的一半,这个颜色就是红色。比如说:(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

把你的RGB颜色值转换成另一种颜色模型,比如HSV,然后比较一下色相,这可能会很有帮助。

撰写回答