从图像中检测肤色

时间:2010-09-13 12:34:15

标签: iphone opencv computer-vision face-detection

我正在尝试开发一种应用程序,一旦提供图像就会检测到脸部的颜色。我能够从OpenCV中找出人脸检测算法并对其进行整合。但是,我找不到任何可以检测到脸部颜色的示例或界面。

我有我提出的逻辑。如果有任何可用的内容,请告诉我,还是需要为此编写单独的功能?

逻辑:在给定的图像区域中,找到主要在给定图像中重复的颜色细节。我已经完成了直方图,不知道它会如何帮助。

非常感谢任何帮助。

3 个答案:

答案 0 :(得分:5)

要检测脸部(或任何图像!)的肤色,我强烈建议您使用HSV色彩空间(或更复杂的色彩空间,如LAB)而不是默认的RGB色彩空间,因为RGB值会有所不同很大程度上取决于强烈或暗淡的光线和阴影等。而HSV在处理光线差异方面要好得多,而且它为您提供了易于使用的色彩值。

HSV表示Hue-Saturation-Value,其中Hue是颜色。例如:0的Hue是红色,50的Hue可能是绿色。饱和度是灰度,因此饱和度值接近0意味着它看起来是暗淡或灰色,而饱和度值200可能是非常强烈的颜色(例如:如果Hue为0则为红色)。而Value是像素的亮度,因此0为黑色,255为白色。

因此,您是否使用直方图,但无论哪种方式,您应首先将图像转换为HSV,然后您可以使用直方图或简单搜索来查找最常见的Hue值。色调值将是您​​想要的肤色或颜色。如果你想让它更先进一点,你可以考虑饱和度和亮度值的值来决定它实际上是黑色还是白色还是灰色而不是颜色。

我的HSV教程页面上有一些更多的OpenCV RGB到HSV转换信息:

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

答案 1 :(得分:4)

直方图表示图像中给定颜色的像素数量。

例如,假设您有这个3x3图像:

3 4 3 1 1 1 2 2 1

直方图将是: 数:4 2 2 1 颜色:1 2 3 4

从中你可以得到最常见的颜色是颜色1.总结非常相似的颜色可能也是有意义的。

例如,使用count(2)= sum(hist(1),hist(2),hist(3)); (以该颜色为单位的像素数)

答案 2 :(得分:3)

OpenCV中没有这样的功能。人脸检测是一个非常复杂的问题,只有很少的方法可以完成这项工作。例如,OpenCV实现了Viola&琼斯人脸检测算法,被称为最好的算法之一。其他一些实现使用神经网络等。

因此,某些一般复杂场景中的人脸检测问题并不像看起来那么容易。我担心使用面部颜色信息不足以提供稳定的结果。有一些论文提出了这样的技术,但算法工作的条件大多受到限制(例如每张图像只有一张脸或非常简单的背景)。