Как по RGB определить является ли цвет оттенком белого?

Важен сам алгоритм, но если что — язык программирования Javascript.
  • Вопрос задан
  • 5338 просмотров
Пригласить эксперта
Ответы на вопрос 7
Mezomish
@Mezomish
Что имеется в виду под «оттенком белого»? Что-то вроде «желтоватый белый», «голубоватый белый» и так далее?
Проще всего — переведите RGB в HSL и дальше смотрите на последнюю компоненту (lightness). То, насколько она будет близка к единице, и есть ваша метрика.

Если же имелся в виду оттенок серого, то смотрите на компоненту saturation.

Перевести RGB в HSL — проще простого.
Ответ написан
@ComodoHacker
Оттенок серого, полагаю.

Если строго, то просто R = G = B. Но в цветах из реального мира (на фотографиях например) такое не встречается. Да и в дизайне сайтов часто используются очень легкие цветовые оттенки.

Если это учитывать, то нужно формулу усложнить. Навскидку, вычислим расстояние в цветовом пространстве между точками (r, g, b) и (m, m, m), где m = (r+g+b)/3. если оно не превышает определенного порога, будем считать оттенок «серым».
Ответ написан
Комментировать
Keyten
@Keyten
Оттенок белого???

Т.е. я так понимаю, определить все светлые цвета. Близкие к белому. Светло-серый (#eee), красновато-белый (#fee) и т.д.

Ну тогда как-то вот так:

function isWhited(r, g, b){ return r > 240 && g > 240 && b > 240 }

Если нужно определить, серый-ли цвет, то тогда вот так:

function isGray(r, g, b){ return r == g == b }
Ответ написан
ngreduce
@ngreduce
наверное имелась ввиду яркость.
Ответ написан
Комментировать
@niko83
Определить является ли цвет нейтральным или имеется какой-то оттенок и какой, и насколько сильный проще всего в Lab.
Есть отличная книга посвящённая одному лишь этому цветовому пространству (Маргулис Д.Photoshop LAB Color Загадка каньона и др. приключения в самом мощном цветовом пространстве)
Если вы работаете в фотошопе и не знакомы с Lab — срочно восполняйте этот пробел.
Ответ написан
Комментировать
@Bodigrim
По уму надо, как вам уже указали, переводить RGB в Lab и затем считать по формулам CIEDE2000.

Если все не настолько серьезно, то можно просто посчитать расстояние в трехмерном пространстве от точки с координатами (R, G, B) до (255, 255, 255):
dist = sqrt( (255-R)^2 + (255-G)^2 + (255-B)^2 )
— и сравнивать полученное расстояние с подобранное экспериментально границей.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы