Сравнение двух цветов HSB

У меня есть проект, который захватывает область и находит ее доминирующий цвет в HSB, я использовал этой статьи, чтобы найти доминирующий цвет.

В моем коде я получаю доминирующий цвет при запуске моего проекта, и каждую секунду я делаю снимок этой области и сравниваю его с первым цветом с помощью этого кода:

private bool IsColorChanged(Structures.HSB hsb)
    {
        //hsb is the newest dominant color of that area
        //m_refcolor is the main color of that area which I got at startup
        Structures.HSB localhsb;
            localhsb.Hue = Math.Abs(hsb.Hue - m_refcolor.Hue);
            localhsb.Saturation = Math.Abs(hsb.Saturation - m_refcolor.Saturation);
            localhsb.Brightness = Math.Abs(hsb.Brightness - m_refcolor.Brightness);
            if ((localhsb.Hue >= m_hsbtr.Htreshold) || (localhsb.Saturation >= m_hsbtr.Streshold) || (localhsb.Brightness >= m_hsbtr.Btreshold))
                return true;
        return false;
    }

Если цвет был изменен на любой цвет, я запускаю событие для пользователя.

Моя конечная цель - узнать, изменился ли цвет на определенный цвет или нет? но я не знаю, что мне делать. Я имею в виду, что я не знаю, как сравнивать HSB друг с другом, код, который я использовал, работает только в том случае, если я хочу знать, изменился ли цвет на любой цвет.

Я использовал С#, но у меня нет проблем с другими языками. Любая помощь будет потрясающей.


person Ahmad Afkandeh    schedule 21.01.2017    source источник
comment
Вас может заинтересовать это обсуждение цветового расстояния   -  person TaW    schedule 21.01.2017
comment
Моя конечная цель - узнать, изменился цвет на определенный цвет или нет: тогда вы просто делаете, если hsb.hue=thisparticularcolor.hue fire event; вам не нужна дискуссия, она вас больше запутает   -  person gpasch    schedule 22.01.2017
comment
@gpasch вы правы, но, например, красный цвет имеет множество значений. и у меня есть область темно-красного цвета, и я хочу знать, стала ли она светло-красной или нет, или даже она стала черной, а стала красной, зеленой или желтой. Так что я не думаю, что это легко, как вы сказали.   -  person Ahmad Afkandeh    schedule 22.01.2017
comment
@TaW Выглядит интересно, спасибо. Я говорю вам, если это решило мою проблему.   -  person Ahmad Afkandeh    schedule 22.01.2017
comment
@TaW Я немного запутался, что, если я хочу сравнить первый HSB со вторым HSB и получить сходство?   -  person Ahmad Afkandeh    schedule 22.01.2017
comment
Ну, это четко не определено; вам решать, насколько важны для вас цифры. Убедитесь, что оттенок масштабируется в том же диапазоне, что и S и B, обычно 0..1. Простейшим показателем будет сумма пресса трех дельт; тут еще надо учитывать обтекание оттенка!! - . Но, может быть, насыщенность немного менее важна, чем яркость?.. Также: не все диапазоны в цветовом пространстве могут восприниматься человеческим глазом одинаково. См. здесь для обсуждения этого   -  person TaW    schedule 22.01.2017


Ответы (1)


Моя проблема была решена с помощью проекта ColorMine без дополнительного кодирования.

Этот проект использует Delta-E для сравнения цветов и поддерживает множество цветовых пространств.

person Ahmad Afkandeh    schedule 23.01.2017