сравнить два компонента с их цветами

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

                double avg1 =(comp[0].Red+comp[0].Blue+comp[0].Green)/3;
                double avg2 =(comp[1].Red+comp[1].Blue+comp[1].Green)/3;

затем сравните их следующим образом

                      double ratio  = avg1/avg2 ;
                      if(ratio > 0.8 && ratio < 1.2){} //then they are supposed to be equal

но этот способ совсем не точен

после поиска я обнаружил, что лучший способ - это преобразовать изображение в пространство HSL и сравнить, но я не могу понять, как сравнить 2 цвета? !! здесь

другими словами, что я могу сделать после преобразования изображения в пространство HSL ?!

Помоги пожалуйста !!

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


person user690069    schedule 14.07.2011    source источник
comment
Какого рода сравнение вы хотите провести? Достаточно близко? Какой у вас вариант использования?   -  person Michael Petrotta    schedule 14.07.2011
comment
на самом деле я хочу получить, если два компонента имеют одинаковый цвет ?! затем сгруппируйте их вместе и т. д.,   -  person user690069    schedule 14.07.2011


Ответы (2)


Преобразуйте в HSL и используйте разницу в H (оттенке) для группировки цветов.

person Jacob    schedule 14.07.2011

Итак, если ваш вопрос: «что я могу сделать после преобразования изображения в пространство HSL ?!» тогда вот идет:

  1. преобразовать загруженное изображение RGB в HSL, используя cvCvtColor() с флагом CV_RGB2HLS (естественно, изображение HSL должно быть 3-канальным)
  2. сделать три одноканальных изображения (одинакового размера) для каналов H, L, S, которые будут разделены на
  3. cvSplit( hls, h, l, s, 0 ) для разделения изображения HSL на каналы
  4. Теперь h_image будет таким же, как любое одноканальное изображение в оттенках серого. Итак, после извлечения компонентов (сделайте это из порогового значения изображения RGB, иногда изображение канала оттенка выглядит странно: P) просто сравните цвета в изображении оттенка, которые соответствуют их координатам.

Надеюсь это поможет.

person AruniRC    schedule 15.07.2011