Найдите наиболее заметный цвет на изображении с помощью Emgu CV

#opencv #webcam #imaging #emgucv

#opencv #Вебкам #визуализация #emgucv

Вопрос:

Итак, у меня есть это изображение лица: http://i.stack.imgur.com/gsZnh.jpg и мне нужно иметь возможность определять наиболее доминирующий / заметный RGB и значение YCrCb из него, используя Emgu CV. Спасибо за помощь.

Ответ №1:

Сначала вы должны получить гистограмму каждого цветового канала. Затем вы можете использовать функцию minmax, чтобы получить наиболее доминирующий цвет.

Код, который я публикую, предназначен для изображения HSV, вы можете изменить названия каналов для своего цветового пространства.

   Image<Gray, Byte>[] channels = hsv1.Split();
                Image<Gray, Byte> ImgHue = channels[0];
                Image<Gray, Byte> ImgSat = channels[1];
                Image<Gray, Byte> ImgVal = channels[2];

 DenseHistogram histo1 = new DenseHistogram(255, new RangeF(0, 255));

 histo1.Calculate<byte>(new Image<Gray, byte>[] { ImgHue }, true, null);

  float minV, maxV;
        int[] minL;
        int[] maxL;


 histo1.MinMax(out minV, out  maxV, out minL, out maxL);


 string mystr = Convert.ToString(maxL[0]);
                label1.Text = "Hue= "   mystr; 
  

То же самое можно сделать и для каналов насыщенности и значения.

Ответ №2:

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