2016-04-24 102 views
1

我已經看到了幾個關於皮膚顏色的問題,但沒有在rgba中找到確切的皮膚顏色範圍。有人可以告訴一箇中年歐洲男人什麼是min-max rgba顏色嗎?什麼是rgb中的膚色範圍?

我的代碼是這樣的:

//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

你爲什麼不測量它?拍一張照片並繪製不同膚色的直方圖 – Maljam

+0

@Maljam我在哪裏可以閱讀如何做到這一點?以及如何製作只有我需要的顏色的直方圖? –

+0

您需要選擇一堆數字圖片,在圖片上手動指定「蒙皮」區域,提取RGB值,創建直方圖。它只是編程......加上大量的手動工作。 –

回答

3

這沒有真正的答案。膚色變化很大(即使是中年高加索男性),然後當您投射光線效果(過度曝光,曝光過度,低光,彩色入射光)時,您無法區分皮膚和非皮膚單獨關於像素的RGB值。

我的建議是選擇合理的第一個近似值,然後調整參數。不要期望能夠準確地檢測皮膚,而不考慮上下文......不知何故。

您可以通過查看您從谷歌搜索的「膚色色圖rgb」中獲得的顏色圖表來獲得您的第一個近似值。隨你挑......


@StephenÇ什麼ü通過「挑明智的一次近似,然後調整參數」是什麼意思?只需從調色板中選擇一種顏色,然後呢?

(忽略照明效果的問題。)由於RGB中的顏色定義了3-D空間,因此我建議在該空間中有顏色爲「膚色」色調的區域。問題是要得到該區域的合理近似值,您可以從「皮膚」色調的顏色圖表開始,以3-D繪製它們並找出一個簡單的3D包圍它們的外殼......並且不會附上看起來不正確的顏色。然後嘗試基於船體的「皮膚檢測」並進行相應調整。