Определить тон кожи по изображению - PullRequest
9 голосов
/ 13 сентября 2010

Я пытаюсь разработать приложение, которое будет определять цвет лица после предоставления изображения.Мне удалось выяснить алгоритм обнаружения лиц из OpenCV и интегрировать его.Однако я не смог найти ни одного примера или интерфейса, с помощью которого я мог бы определить цвет лица.

У меня есть логика, которую я представляю.Пожалуйста, дайте мне знать, если для этого есть что-нибудь или мне нужно написать отдельную функцию для этого?

Логика : в данной области изображения найдите цветную деталь, которая повторяетсяв основном в данной.Я просмотрел гистограмму и не уверен, как она поможет.

Любая помощь будет принята с благодарностью.

Ответы [ 3 ]

5 голосов
/ 15 сентября 2010

Для определения тона кожи лица (или любого изображения!) Я настоятельно рекомендую использовать цветовое пространство HSV (или более сложное цветовое пространство, такое как LAB), а не цветовое пространство RGB по умолчанию, поскольку значения RGB будут различатьсямного зависит от сильного или тусклого освещения, теней и т. д. Принимая во внимание, что HSV намного лучше справляется с различиями в освещении, и он дает вам простое в использовании значение цвета.

HSV означает значение Hue-Saturation-Value, где Hueэто цвет.Например: оттенок 0 - красный, а оттенок 50 - зеленый.Насыщенность - это серый цвет, поэтому значение насыщенности около 0 означает, что оно выглядит тусклым или серым, в то время как значение насыщенности 200 может быть очень сильным цветом (например, красный, если оттенок равен 0).Значение - это яркость пикселя, поэтому 0 - это черный, а 255. - это белый.

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

У меня естьнемного больше информации о преобразовании OpenCV RGB в HSV на моей странице учебника HSV по адресу:

http://www.shervinemami.co.cc/colorConversion.html

4 голосов
/ 13 сентября 2010

Гистограмма представляет количество пикселей данного цвета в изображении.

Например, предположим, что у вас есть это изображение 3x3:

3 4 3 1 1 1 22 1

Гистограмма будет выглядеть следующим образом: count: 4 2 2 1 color: 1 2 3 4

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

Например, используйте count (2) = sum (Hist (1), Hist (2), Hist (3));(при этом число пикселей в этом цвете)

3 голосов
/ 13 сентября 2010

Там нет такой функции в OpenCV и по причине.Обнаружение лица - очень сложная проблема, и есть только несколько подходов, которые делают работу.Например, OpenCV реализует алгоритм обнаружения лиц Viola & Jones, который известен как один из лучших таких алгоритмов.В некоторых других реализациях используются нейронные сети и т. Д.

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

...