2012-05-22 164 views
2

我在Java中處理一個項目,該項目加載圖像並查找每個像素的顏色信息。我需要使用藍色範圍來檢測顏色定義上的天空,看起來像天空。最初似乎最好使用RGB,但這需要定義所有藍色(不可數)的色調。我發現了分析方法,其中每種顏色都使用HSV閾值,但不知道如何使用顏色範圍加載一些庫,以及如何解決這些問題。謝謝你的幫助。Java:檢測顏色(例如,我的顏色是藍色的嗎?)

回答

3

您可以使用靜態方法RGBtoHSB(...)java.awt.Color轉換爲它的HSV值。然後,您可以獲得色調,並將其與爲了您的目的而構成「藍色」的範圍的邊界進行比較 - 例如,

private static final float MIN_BLUE_HUE = 0.5f; // CYAN 
private static final float MAX_BLUE_HUE = 0.8333333f; // MAGENTA 

public static boolean isBlue(Color c) { 
    float[] hsv = Color.RGBtoHSB(c.getRed(), c.getGreen(), c.getBlue(), null); 
    float hue = hsv[0]; 
    if (hue >= MIN_BLUE_HUE && hue <= MAX_BLUE_HUE){ 
    return true; 
    } 
    return false; 
} 

我已經提供了一些初始值MIN_BLUE_HUEMAX_BLUE_HUE,但你設置MIN_BLUE_HUEMAX_BLUE_HUE到將取決於你願意接受爲「藍色」 - 即有多少綠色或紫色莫不是是的,它仍然可以接受的天空?

+0

感謝您的回答。同樣的問題是,當我使用RGB時 - 我必須定義一系列色調,飽和度和值(或brigthess) - 使藍色變爲藍色的組合 - 來編寫它,這幾乎是不可能的。我需要的是一些「發電機」(「庫」),其中包含所有組合 - 顏色表。這個「表」我用於比較具體的像素與提到如果。 –

+0

@ZbyněkDufka:否 - 在HSV空間中,只有色調決定了它的顏色。飽和度決定了顏色的「白色」。價值/亮度決定了顏色如何「黑暗」。 – amaidment

+0

@ZbyněkDufka - c.f. http://en.wikipedia.org/wiki/HSL_and_HSV – amaidment