我已经看过关于肤色的几个问题,但在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值。

最佳答案

对此没有真正的答案。肤色变化很大(即使对于中年白人也是如此),然后当您施加照明效果(过度曝光,曝光不足,弱光,有色入射光)时,您无法仅基于RGB来区分皮肤和非皮肤像素值。

我的建议是先选择一个明智的近似值,然后调整参数。并且不要指望能够在不考虑上下文的​​情况下准确选择皮肤。

您可以通过查看从Google搜索的“肤色颜色图表rgb”中获得的一个颜色图表来获得第一近似值。选择...




  @Stephen C“通过先选择明智的近似值,然后调整参数”是什么意思?仅从调色板中选择一种颜色,那又是什么?


(忽略照明效果的问题。)由于RGB中的颜色定义了3-D空间,因此我建议在该空间中的某个区域中颜色是“肤色”色调。问题是要获得该区域的合理近似值,您可以从“肤色”色表开始,将它们绘制为3-D并找出一个简单的3-D外壳将其包围起来...而不会封闭看起来不正确的颜色。然后尝试根据船体进行“皮肤检测”并进行相应调整。

关于java - rgb中的肤色范围是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36820218/

10-10 18:27