【发布时间】:2023-03-18 11:55:01
【问题描述】:
我正在尝试构建一个应用程序,该应用程序可以检测皮肤不同部位(手、前额、脸颊)的肤色,而不受光照条件的影响。我可以使用这个project 来做到这一点,但它不考虑照明条件。这是Iphone app 中的一个
【问题讨论】:
标签: android opencv image-processing camera color-detection
我正在尝试构建一个应用程序,该应用程序可以检测皮肤不同部位(手、前额、脸颊)的肤色,而不受光照条件的影响。我可以使用这个project 来做到这一点,但它不考虑照明条件。这是Iphone app 中的一个
【问题讨论】:
标签: android opencv image-processing camera color-detection
如果您想自己进行一些图像处理,我建议您为图像的每个面部区域创建一个直方图。只要opencv能够检测到人脸,你就应该能够对该区域的直方图进行归一化,并取归一化版本的颜色值。
也许您想分别归一化所有通道(R、G、B)以减少彩色光的影响。
阅读此处了解有关直方图的更多信息:https://en.wikipedia.org/wiki/Histogram
当您按照这种方式进行操作时,我强烈建议您将一张脸作为一个整体区域来创建直方图。
[编辑]
既然我知道你想做什么,我认为你可以采取以下方法:
如您所见,用户需要前后点击摄像头。由于图像由手机背面引导,直方图确实正是该应用程序的创建者正在创建的。但是,不是来自不同的像素,而是来自使用不同光照级别的同一像素的不同样本。
当您非常靠近皮肤时,相机会显示近乎白色的图像,即,如果您愿意,可以显示直方图计算的“固定点”。
虽然我不打算展示直接代码,但我会尝试解释数学模型:
threshold 值的最高和最低值(如果你喜欢,你的“工作”范围)并将它们称为histLow 和histHigh
pixel = (pixel-histLow) / (histHigh-histLow) * 255
如果您不知道如何在 RGB 中相乘或相加,那么您应该从另一个问题开始。
【讨论】: