2012-01-06 2 views
5

Я видел все вопросы на 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}) is i t обнаруживает даже красный цвет, и когда вы кладете руку на красный фон, она не отслеживает вашу кожу ...
Пожалуйста, помогите !!!

+1

Что относительно афроамериканцев (если это даже правильный термин)? Или коренные американцы? Или индейцы? Или австралийских аборигенов? Или маленькие зеленые люди? – paxdiablo

+0

Я говорю вообще ... Это должно быть для человеческой кожи ... Пожалуйста, дайте мне разные диапазоны, если это так ... Я думаю, что мы можем использовать cvInRangeS для нескольких диапазонов ... – Wazzzy

+0

В этом ваша проблема. Поскольку вас интересуют только люди (и я предполагаю, что вы не подписываетесь на какую-то причудливую расистскую философию рассмотрения других рас нечеловеческих), мы можем только подсчитать маленьких зеленых людей. Это все еще оставляет цветовой диапазон _massive_ для обслуживания. Теперь я предполагаю, что это делать что-то с фотографиями или видеороликами (рассказывая о различии между кожей и всем остальным), поэтому, если ваша фотография не помечена как-то как содержащая только кавказцев или аборигенов или что-то еще, шансы быть способными рассказать разницу между человеком и нечеловеком мало. Даже с несколькими диапазонами. – paxdiablo

ответ

6

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

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

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

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

+0

Просто прочитайте ваш комментарий и понравилась идея ... coz что я пытаюсь сделать ... Позвольте мне проверить ссылку, которую вы предоставили ... Большое спасибо за ответ .... – Wazzzy

+0

Не удалось найти значения, хотя !!!! – Wazzzy

7

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

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

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

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

+0

Большое спасибо за ответ .... Перчатка не то, что я хочу ... – Wazzzy

3

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

+0

Я проверю это, но .... Спасибо за ответ, хотя .... – Wazzzy

1

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

4

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

+0

Его никогда не поздно ... Хорошая ссылка на обосновать ответ... – Wazzzy

0

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

Смежные вопросы