Точный цвет кожи HSV - PullRequest
       16

Точный цвет кожи HSV

6 голосов
/ 06 января 2012

Я видел все вопросы по SO для диапазона цветового пространства HSV для кожи
Но я могу только выяснить это

Код -

CvScalar  hsv_min = cvScalar(0, 30, 60, 0);
CvScalar  hsv_max = cvScalar(20, 150, 255, 0);
//range I am using is { 0,30,60,0 & 20,150,255,0 }
cvCvtColor(src, hsv_image, CV_BGR2HSV);
cvInRangeS (hsv_image, hsv_min, hsv_max, hsv_mask);
cvDilate(hsv_mask,hsv_mask,0,1);
cvErode(hsv_mask,hsv_mask,0,1);
cvSmooth( hsv_mask, hsv_mask, CV_MEDIAN);

Проблема с этим диапазоном ( {0,30,60,0 & 20,150,255,0} ) , если он обнаруживает даже красный цвети когда вы кладете руку на красный фон, она не отслеживает вашу кожу ...
Пожалуйста, помогите !!!

Ответы [ 7 ]

8 голосов
/ 06 января 2012

В соответствии с этим: http://matmidia.org/sibgrapi2009/media/posters/59928.pdf

Скин в канале H характеризуется значениями от 0 до 50, в канале S от 0,23 до 0,68 для этнических групп азиатских и кавказских народов.

Вы должны быть особенно осторожны с очень темными частями изображения и, возможно, вообще отказаться от них, так как преобразование HSV становится действительно шумным для небольших значений V.

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

7 голосов
/ 06 января 2012

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

Итак, возможно, вы можете использовать идею этой прекрасной научной статьи 2011 года:

http://www.robots.ox.ac.uk/~vgg/research/hands/

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

5 голосов
/ 03 декабря 2015

Я знаю, что уже слишком поздно отвечать на это.Но я делаю то же самое, и я использовал K означает кластеризацию, чтобы получить цвет кожи.Сначала вы должны определить лицо, что я и делаю с использованием каскадного классификатора Хаара, а затем на основе координат лица вы можете обрезать лицо, а затем использовать его в качестве источника для кластеризации цвета.Узнайте кластер, который имеет наибольшее количество элементов, и это будет ваш цвет кожи.Или, не указывая одно конкретное значение, вы можете получить центральную точку кластера и использовать его в качестве диапазона, вычитая и добавляя определенное значение.Это будет полезно http://answers.opencv.org/question/23196/k-mean-clustering-of-hsv-histogram-of-frames-of-a-video/

3 голосов
/ 23 января 2012

Адаптивный детектор кожи существует на OpenCv см. примеры / c / adaptiveskindetector_sample.cpp

2 голосов
/ 21 января 2019

Попробуйте эту функцию предварительной обработки в вашем коде:

def preprocess(action_frame):

    blur = cv2.GaussianBlur(action_frame, (3,3), 0)
    hsv = cv2.cvtColor(blur, cv2.COLOR_RGB2HSV)

    lower_color = np.array([108, 23, 82])
    upper_color = np.array([179, 255, 255])

    mask = cv2.inRange(hsv, lower_color, upper_color)
    blur = cv2.medianBlur(mask, 5)

    kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (8, 8))
    hsv_d = cv2.dilate(blur, kernel)

return hsv_d

Я использую это уже несколько месяцев.Это может решить твою проблему навсегда.

2 голосов
/ 19 марта 2017

Я пытался
lower = np.array([0, 10, 60], dtype = "uint8") upper = np.array([20, 150, 255], dtype = "uint8") Это дает почти хороший результат.

1 голос
/ 13 апреля 2015

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

...