我如何找到一个给定的RGB颜色是否在已知颜色范围之间?

问题描述 投票:2回答:4

这里有一些代码来尝试并演示我想做的事情。

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

我如何执行比较?

python image python-imaging-library rgb pixel
4个回答
3
投票

将你的RGB值转换为另一个 色号 喜欢 HSV 并比较Hue可能是有帮助的。


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))

ideone


0
投票

这也许会对你有所帮助。

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

print (tuple1 == tuple2)    # False

print (tuple1 < tuple2)      # True

print (tuple1 > tuple2)      # False

更多例子 https:/howtodoinjava.compythoncompare-tuples。

© www.soinside.com 2019 - 2024. All rights reserved.