【问题标题】:Detect skin tone from an image从图像中检测肤色
【发布时间】:2011-04-11 15:39:52
【问题描述】:

我正在尝试开发一个应用程序,该应用程序将在提供图像后检测面部颜色。我能够从 OpenCV 中找到人脸检测算法并将其集成。但是我找不到任何可以检测面部颜色的示例或界面。

我有我要呈现的逻辑。请让我知道是否有任何可用的东西,或者我需要为此编写单独的函数吗?

逻辑:在给定的图像区域中,找到在给定中重复最多的颜色细节。我浏览了直方图,但不确定它会有什么帮助。

任何帮助将不胜感激。

【问题讨论】:

    标签: iphone opencv computer-vision face-detection


    【解决方案1】:

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

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

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

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

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

    【解决方案2】:

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

    例如,假设您有这个 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)); (作为该颜色的像素数)

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 2011-05-24
        • 2012-05-18
        • 1970-01-01
        • 2018-05-11
        • 1970-01-01
        • 1970-01-01
        • 2019-12-26
        • 2023-03-18
        • 1970-01-01
        相关资源
        最近更新 更多