2011-12-10 84 views
6

如果我得到淺灰色的顏色(例如R = G = B = 200)和暗的一個(例如R = 46,G = 41,B = 35),我想兩者分類到簡單的灰色顏色組(想象一張桌子)。如何將某些顏色分類爲顏色範圍?

所以,我怎麼能組織顏色,顏色組?

+0

你是什麼顏色的組織呢? –

+0

你有什麼樣的顏色組合? – Magnus

+0

我還沒有決定。首先,我想創建算法。 (但你可以用50-60組計算) – laszlokiss88

回答

12

對於顏色視覺的分類,它往往是比較容易的顏色轉換先到HSL or HSV。要檢測灰色,請檢查飽和度是否低於某個閾值。要檢測其他顏色,請檢查色調。

public string Classify(Color c) 
{ 
    float hue = c.GetHue(); 
    float sat = c.GetSaturation(); 
    float lgt = c.GetLightness(); 

    if (lgt < 0.2) return "Blacks"; 
    if (lgt > 0.8) return "Whites"; 

    if (sat < 0.25) return "Grays"; 

    if (hue < 30) return "Reds"; 
    if (hue < 90) return "Yellows"; 
    if (hue < 150) return "Greens"; 
    if (hue < 210) return "Cyans"; 
    if (hue < 270) return "Blues"; 
    if (hue < 330) return "Magentas"; 
    return "Reds"; 
} 

你當然可以使用其他部門。

我做了一個簡單的JavaScript應用程序來測試這一點:Color classification

+0

嗯,泰克,我立即嘗試。 – laszlokiss88

1

有分類顏色的幾種方法。一種方法是將rgb視爲一個三維座標,然後所有可能的顏色都可以在一個盒子或立方體中呈現,其中原色中的黑色和位於(255,255,255)處的對角的白色。所有的灰色將接近對角線。 靠近軸的是紅色,綠色和藍色。 這樣分類問題已經轉化爲找到三維空間中一個點(顏色)和一條線(灰色對角線)之間的最近距離。如果距離低於給定的閾值,顏色將被分類爲灰色。

+0

這可以工作,但有點複雜... – laszlokiss88

+0

是的。它與使用HSL/HSV表示法基本上是相同的,但是它已經被轉換爲圓柱體而不是立方體。 – danca

-1

如何下面顏色表的實現:

​​

而下面的代碼編寫生成/獲得色彩組:

//Generating Color Group Table 
List<ColorTable> MyColorTable = new List<ColorTable>(); 
MyColorTable.Add(new ColorTable { GroupName = "Gray", ColorName = Color.Gray }); 
MyColorTable.Add(new ColorTable { GroupName = "Gray", ColorName = Color.LightGray }); 
MyColorTable.Add(new ColorTable { GroupName = "Green", ColorName = Color.Green }); 
MyColorTable.Add(new ColorTable { GroupName = "Green", ColorName = Color.LightGreen }); 

//Getting required Color Group, say "Gray" 
List<ColorTable> GreenColor = MyColorTable.Where(c => c.GroupName == "Gray").ToList(); 
+0

我剛剛已通過色彩的名字,你可以用範圍發送彩色的名字,感謝 –

+0

謝謝,但這不是我的問題的答案。 假設你有一個顏色,用下面的RGB值: 55,83,70(很暗綠色,幾乎灰色)
所以,問題是,這組將包含這種顏色?綠色還是灰色? (所以我沒有任何預定義的顏色,分類到組,只有幾個羣名稱(與rgb值),例如綠色和灰色。)

但是RGB不是必需的,它可以如果CMYK或者hexa或者任何東西更容易。 – laszlokiss88