Detect skin tone from an image

后端 未结 3 1706
渐次进展
渐次进展 2021-02-14 21:19

I am trying to develop an application which will detect the color of the face once an image is provided. I was able to find out the face detection algorithm from OpenCV and inte

相关标签:
3条回答
  • 2021-02-14 21:42

    To detect skin tone of a face (or any image!), I highly recommend that you use the HSV color space (or a more complex colorspace such as LAB) rather than the default RGB colorspace, because RGB values will vary a lot depending on strong or dim lighting and shadows, etc. Whereas HSV is much better at handling lighting differences, and it gives you an easy to use color value.

    HSV means Hue-Saturation-Value, where the Hue is the color. eg: a Hue of 0 is red and a Hue of 50 might be green. Saturation is the greyness, so that a Saturation value near 0 means it is dull or grey looking whereas as a Saturation value of 200 might be a very strong color (eg: red if Hue is 0). And Value is the brightness of the pixel, so 0 is black and 255 is white.

    So whether you use a histogram or not is upto you, but either way you should first convert your image to HSV, then you can look for the most common Hue value using a histogram or just a simple search. The Hue value will be the skin tone or color you want. And if you want to make it a bit more advanced, you could take into account the values of Saturation and brightness Value to decide if it is actually black or white or grey rather than a color at all.

    I have some more OpenCV RGB to HSV conversion info on my HSV tutorial page at:

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

    0 讨论(0)
  • 2021-02-14 21:44

    There's no such function in OpenCV and by reason. Face detection is very complex problem and there are only few approaches that do the work. For example, OpenCV implements Viola & Jones face detection algorithm which is known as one of the best such algorithms. Some other implementations use neural networks etc.

    So, face detection problem in some general complex scenes isn't as easy as it seems. I'm afraid that using face color information wouldn't be good enough to give stable results. There are some papers suggesting such techniques but conditions under which algorithm works are mostly limited (e.g. only one face per image or very simple background).

    0 讨论(0)
  • 2021-02-14 21:45

    The histogram represents the amount of pixels of a given color which are in the image.

    For example, lets say you have this 3x3 image:

    3 4 3 1 1 1 2 2 1

    The histogram would be: count: 4 2 2 1 color: 1 2 3 4

    from this you would have that the color which is found most is the color 1. It probably also would make sense to sum up very similar color.

    For example use count(2) = sum(hist(1), hist(2), hist(3)); (being hist the number of pixels in that color)

    0 讨论(0)
提交回复
热议问题