什么是rgb的肤色范围?

时间:2016-04-24 06:58:22

标签: java colors rgb javacv

我已经看过几个关于肤色的问题但是在rgba中没有找到确切的肤色范围。有人可以告诉一个中年欧洲男人的最小 - 最大rgba颜色吗?

我的代码是这样的:

   //Here should be scin min max rgba range
static CvScalar min = cvScalar(0, 0, 130, 0);//BGR-A
static CvScalar max= cvScalar(140, 110, 255, 0);//BGR-A

public static void main(String[] args) {
    //read image
    IplImage orgImg = cvLoadImage("colordetectimage.jpg");
    //create binary image of original size
    IplImage imgThreshold = cvCreateImage(cvGetSize(orgImg), 8, 1);
    //apply thresholding
    cvInRangeS(orgImg, min, max, imgThreshold);
    //smooth filter- median
    cvSmooth(imgThreshold, imgThreshold, CV_MEDIAN, 13);
    //save
    cvSaveImage("threshold.jpg", imgThreshold); }

所以我需要在这里指定rgba值。

1 个答案:

答案 0 :(得分:3)

对此没有真正的答案。肤色变化很大(即使是中年白人男性),当你投入照明效果(过度曝光,曝光不足,光线不足,彩色入射光)时,你可以区分皮肤和非皮肤< em>仅 RGB像素值。

我的建议是选择合理的第一近似值,然后调整参数。并且不要期待能够准确地检测皮肤而不考虑上下文...不知何故。

您可以通过查看从谷歌搜索&#34;皮肤色调图表rgb&#34;中获得的一个颜色图表来进行第一次近似。随便挑选......

  

@Stephen C你用什么意思&#34;选择合理的第一近似值,然后调整参数&#34; ?只需从调色板中挑选1种颜色然后呢?

(忽略光照效果的问题。)由于RGB中的颜色定义了一个三维空间,我建议在那个空间中有一个区域,颜色是&#34; skin&#34;色调。问题是要获得该区域的合理近似值,您可以从&#34; skin&#34;的颜色图表开始。音调,将它们绘制成3-D,并找出一个简单的3-D船体,将它们包围起来...并且不会包含看起来不适合您眼睛的颜色。然后尝试你的皮肤检测&#34;基于船体并相应调整。