据此: http : //matmidia.org/sibgrapi2009/media/posters/59928.pdf
通道H中的皮肤的特征是介于0到50之间的值,对于亚裔和高加索族裔,通道S中的皮肤从0.23到0.68。
您必须格外小心处理图像的非常暗的部分,并可能将其完全丢弃,因为HSV转换对于较小的V值会产生很大的噪声。
根据您的约束条件,您还可以考虑使用彩色手套(某些颜色在场景中无法正常显示),或将背景设置为与红色不同的颜色,该颜色与肤色(品红色,绿色,随你)。
0
据此: http : //matmidia.org/sibgrapi2009/media/posters/59928.pdf
通道H中的皮肤的特征是介于0到50之间的值,对于亚裔和高加索族裔,通道S中的皮肤从0.23到0.68。
您必须格外小心处理图像的非常暗的部分,并可能将其完全丢弃,因为HSV转换对于较小的V值会产生很大的噪声。
根据您的约束条件,您还可以考虑使用彩色手套(某些颜色在场景中无法正常显示),或将背景设置为与红色不同的颜色,该颜色与肤色(品红色,绿色,随你)。
0
OpenCv上存在自适应皮肤检测器,请参见samples / c / adaptiveskindetector_sample.cpp
0
在您的代码中尝试以下预处理功能:
def preprocess(action_frame):
blur = cv2.GaussianBlur(action_frame, (3,3), 0)
hsv = cv2.cvtColor(blur, cv2.COLOR_RGB2HSV)
lower_color = np.array([108, 23, 82])
upper_color = np.array([179, 255, 255])
mask = cv2.inRange(hsv, lower_color, upper_color)
blur = cv2.medianBlur(mask, 5)
kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (8, 8))
hsv_d = cv2.dilate(blur, kernel)
return hsv_d
我已经使用了几个月了。它可能会永远解决您的问题。
0
我努力了
lower = np.array([0, 10, 60], dtype = "uint8") upper = np.array([20, 150, 255], dtype = "uint8")
它给出了几乎很好的结果。
0
基本上,很难为皮肤设置一个固定的颜色范围,因为即使您只想检测自己的皮肤,其颜色实际上也会根据光照条件发生很大变化。
因此,也许您可以使用2011年这篇出色的科学文章的想法:
http://www.robots.ox.ac.uk/~vgg/research/hands/
基本上,他们会检测人脸(使用oepncv很容易)。然后,他们提取脸部的皮肤颜色(这对于图像上的人来说是非常特定的)。然后他们使用这种颜色检测皮肤。由于颜色是非常特定的,因此与固定颜色范围内的颜色相比,它们应该少得多的错误检测。
0
我知道现在回答这个问题为时已晚。但是我也一样,我用K表示聚类以获得肤色。首先,您必须检测到我使用Haar级联分类器进行的面部处理,然后根据面部的坐标来裁剪面部,然后将其用作对颜色进行聚类的来源。找出具有最多元素并且将是您的肤色的群集。或者不指定一个特定值,您就可以获取聚类中心点,并且可以通过减去并添加一个特定值来将其用作范围。这将对http://answers.opencv.org/question/23196/k-mean-clustering-of-hsv-histogram-of-frames-of-a-video/有帮助
0
我已经看到所有关于皮肤HSV颜色空间范围的问题
但我只能弄清楚
代码-
与此范围内({0,30,60,0和20,150,255,0}) 问题是,它甚至可以检测红色,当你把你的手在红色背景也不会跟踪你的皮肤...
请帮忙 !!!