我已经看过几个关于肤色的问题但是在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值。
答案 0 :(得分:3)
对此没有真正的答案。肤色变化很大(即使是中年白人男性),当你投入照明效果(过度曝光,曝光不足,光线不足,彩色入射光)时,你可以区分皮肤和非皮肤< em>仅 RGB像素值。
我的建议是选择合理的第一近似值,然后调整参数。并且不要期待能够准确地检测皮肤而不考虑上下文...不知何故。
您可以通过查看从谷歌搜索&#34;皮肤色调图表rgb&#34;中获得的一个颜色图表来进行第一次近似。随便挑选......
@Stephen C你用什么意思&#34;选择合理的第一近似值,然后调整参数&#34; ?只需从调色板中挑选1种颜色然后呢?
(忽略光照效果的问题。)由于RGB中的颜色定义了一个三维空间,我建议在那个空间中有一个区域,颜色是&#34; skin&#34;色调。问题是要获得该区域的合理近似值,您可以从&#34; skin&#34;的颜色图表开始。音调,将它们绘制成3-D,并找出一个简单的3-D船体,将它们包围起来...并且不会包含看起来不适合您眼睛的颜色。然后尝试你的皮肤检测&#34;基于船体并相应调整。