Как я могу определить, находится ли данный цвет RGB в диапазоне известных цветов? - PullRequest
2 голосов
/ 29 января 2011

Вот некоторый код, чтобы попытаться продемонстрировать, что я пытаюсь сделать:

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

Как выполнить сравнение?

Ответы [ 3 ]

3 голосов
/ 29 января 2011

Преобразование значения RGB в другую цветовую модель , например HSV , и сравнение оттенков, вероятно, полезно.

1 голос
/ 31 января 2011

Вы можете выбрать точки среза для цветов.Цвета 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"

Это относится только к красному, зеленому и синему, и вы захотите настроить правила в соответствии со своими потребностями.Вы также можете установить другие правила, чтобы найти другие цвета, такие как желтый или фиолетовый и т. Д. *

1 голос
/ 29 января 2011

Вы можете попробовать проверить каждый компонент цвета отдельно:

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

ideone

...