Проверьте, содержится ли пиксель (RGB или HSV) в диапазоне цветовой шкалы, как - PullRequest
1 голос
/ 01 марта 2011

Мне нужно проверить, содержится ли пиксель (RGB) в цветовой шкале от светло-розового до темно-фиолетового.Используя схему RGB, могу ли я выполнить проверку следующим образом:

IF image [x, y] [R]> threshold and image [x, y] [G]> threshold image [x, y] [B]> threshold and \
     image [x, y] [R] <threshold and image [x, y] [G] < threshold image [x, y] [B] <threshold THAN ...

?

Если нет, у меня также есть возможность иметь пиксель в HSV.

Спасибо!

Ответы [ 3 ]

3 голосов
/ 02 марта 2011

Использование значений отсечки для каждого канала эквивалентно обозначению выровненного по оси прямоугольника в цветовом пространстве RGB.Коробка имеет неприятную форму - вам, вероятно, придется включать некоторые области, которые вам не нужны (в углах), чтобы исключить области, которые вы действительно хотите (в центре граней).

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

Что-то вроде

def colorRange(ax, ay, az, bx, by, bz, dist):
    def testPixel(cx, cy, cz):
        return (
            (cx-ax)**2 + (cy-ay)**2 + (cz-az)**2
            + (cx-bx)**2 + (cy-by)**2 + (cz-bz)**2
        ) < dist**2
    return testPixel

isPurple = colorRange(140,0,140, 255,75,255, 230)
isPurple(203,46,195)  # -> True
3 голосов
/ 01 марта 2011

Вы, вероятно, хотите работать в HSV, потому что он гораздо более интуитивно отображает человеческое восприятие, чем RGB. Если вы заставите человека пометить цвета как «в диапазоне» или «вне диапазона» и отобразить их в HSV, вы сможете найти границу значений H, S и V, которые указывают на вход и выход.

Затем вы можете использовать простую проверку диапазона, как вы обрисовали в общих чертах, чтобы определить, включен или нет цвет. Если вам нужна помощь Python в преобразованиях цветового пространства, стандартный библиотечный модуль colorsys сделает это за вас.

0 голосов
/ 01 марта 2011

Если вы говорите о целочисленных значениях RGB, вы можете поместить все значения в set, а затем просто сделать if color in set:

Если ваш «цветовой диапазон» определяется сложным образомопределение конкретного набора цветов может быть единственным способом.

...