Есть ли способ определить цвета, заданные их шестнадцатеричными кодами, как оттенки определенного цвета?
Я думаю, что нашел способ, не уверен, насколько точным - но как я могу определить, соответствует ли найденный вами цвет не достаточно хорошо?Поиск наилучшего совпадения цвета - и отклонение, если нет оттенков цвета
Мне нужно определить цветовые соответствия для определенных цветов - фиксированный набор (красный, желтый, оранжевый, синий, зеленый, коричневый, фиолетовый, серый, черный, белый).
На данный момент я делаю матч цвета в зависимости от расстояния:
Учитывая цвет c
из списка фиксированного цвета выше (я набор с помощью шестигранных цвета, мы надеемся, будет в середине диапазона для этого цвета , который я не совсем уверен, как получить - прямо сейчас я использую цвет, который выглядит «хорошо»), а список доступных цветов list
, я пытаюсь найти индекс из списка с самым близким цветом.
int matchColor(QColor c, QList<QColor> list)
{
int bestIndex = 0;
int distance;
int bestMatch = 0;
int sz = list.size() - 1;
for (int i = 0; i <= sz; ++i)
{
int Rdiff = 255 - qAbs(c.red() - list.at(i).red());
int Gdiff = 255 - qAbs(c.green() - list.at(i).green());
int Bdiff = 255 - qAbs(c.blue() - list.at(i).blue());
distance = Rdiff + Gdiff + Bdiff;
if (distance > bestMatch)
{
bestMatch = distance;
bestIndex = i;
}
}
// if(bestMatch < 600 ? or something ?) return -1;
return bestIndex;
}
Проблема заключается в том, потому что этот матч должен строго соблюдаться (для некоторых стандартов), я должен вернуться оттенки определенного цвета c
и неудачу, если я не могу.
Я не на 100% уверен, что совпадение цвета хорошее - хотя это выглядит довольно хорошо.
Но кроме поиска наилучшего совпадения цвета - какое разумное значение расстояния, за которое я должен отклонить матч? (ожидая distance
между 0 и 765, с идеальным соответствием 765).
Есть ли определенные диапазоны, которые я могу проверить?
Будет ли диапазон отличаться для каждого цвета?
Примечание. Я нашел некоторые подобные вопросы, некоторые из них ссылаются на более сложные алгоритмы, которые я не мог понять, но я не видел ничего, что могло бы сказать мне, как отклонить соответствие ... Я был бы признателен за лучшее решение, если оно есть.
Да, диапазон будет отличаться для каждого цвета, если вы сначала не преобразовать в перцептивно равномерного цветового пространства, такие как [CIE Lab] (https://en.wikipedia.org/wiki/Lab_color_space) , –