Выбор ближайшего цвета RGB из std :: map - PullRequest
2 голосов
/ 14 ноября 2010

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

Ответы [ 2 ]

3 голосов
/ 14 ноября 2010

Да, вам нужно будет перебрать каждый цвет на карте и рассчитать расстояние.Кроме того, цвета являются трехмерными, тогда как std :: map является 1D, вам, вероятно, нужно что-то вроде дерева 3D kd вместо карты 1D для быстрого поиска, если у вас много цветов.Хотя итерация по нескольким цветам не будет очень дорогой.

0 голосов
/ 14 ноября 2010

Цвета немного сложнее, чем 3D.Вы должны подумать о яркости, а также о том, каким может быть красный, зеленый или синий цвет.Так что 1,0,0 ближе к 255,0,0, чем к 0,1,0?Так что, возможно, цвета должны рассматриваться как четырехмерные?Кроме того, реакция человека на цвета не является линейной, поэтому, если вы просто посмотрите на математическое расстояние между двумя значениями RGB, вы будете измерять «расстояние», которое не соответствует расстоянию, которое человек оценит между двумя цветами.

Для этого вида или работы RGB является очень неудовлетворительной мерой цвета (хотя это удобно для управления оборудованием). Многие люди рекомендуют использовать систему HSL, которая позволяет вам устанавливать яркость независимо от «цвета» и котораядолжен более точно соответствовать реакции человека на цвет.

Подробнее об использовании HSL в этом виде работы и о коде для преобразования между HSL и RGB см. мой предыдущий ответ Функция созданияцвет колес

...