如何判断一个RGB颜色是否在已知颜色范围内?
这里有一些代码,想给大家演示一下我想做的事情:
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))
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,然后比较一下色相,这可能会很有帮助。