【问题标题】:Detecting color range from "average" in OpenCV在 OpenCV 中从“平均”检测颜色范围
【发布时间】:2014-02-27 01:18:14
【问题描述】:

目前我正在使用 HaarCascade 来检测图片中的人脸。哪个有效,我得到了脸部位置的直方图。

现在我想得到“平均值?” (肤色)在那个矩形。并将其用作颜色范围的基础,以搜索照片中的其他皮肤。我该怎么办?

我找到了 inRange 函数,它在一个范围内搜索颜色。但我不太确定如何获得我皮肤的平均颜色。似乎 inRange 函数需要 HSV 值?但是,我不太清楚这种格式是什么。它似乎与 Photoshop 中的 HSB 不一样。 (我出于“测试目的”而尝试过)。

我的问题归结为这一点,我怎样才能获得矩形中的“平均”颜色,并在该范围内找到其他颜色(例如,比该颜色更亮和更暗,但阴影相同)。

谢谢。

【问题讨论】:

  • HSL and HSV。 HSV 和 HSB 是同义词。
  • 相当棘手。请记住,面部特征可能存在阴影,这会影响确切的颜色。 HSV/HSL 模型的好处是阴影不会真正影响 H,但它们会影响所有 R、G 和 B。

标签: c++ opencv computer-vision skin


【解决方案1】:

获取检测到的感兴趣区域内的 3D 颜色直方图。也就是说,不是每个通道的三个 1D 直方图,而是所有 3 个通道的一个 3D 直方图。 OpenCV 的calcHist 有这方面的选项。这是an example,它可以做到这一点。此示例使用 Python 绑定 OpenCV,但它显示了如何设置参数。

另外,将直方图的范围设置在适合肤色的合理范围内。正如 MSalters 在 cmets 中所建议的那样,HSV 是这样一种更好的色彩空间。或许你可以忽略 S 和 V 通道,只为 V 做一维直方图。Try 已经结束了。

计数最多的垃圾箱将是您的“平均”肤色。

【讨论】:

    猜你喜欢
    • 2017-10-14
    • 2014-06-19
    • 2019-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多