2012-11-11 286 views
0

我正在使用BufferedImage來保存10 x 10的圖像樣本。有了這個圖像,我想找到一個近似的平均顏色(作爲Color對象),代表這個圖像。目前,我對如何實現此功能兩個想法:查找圖像的平均顏色

  1. 使圖像的縮放實例爲1 1米大小的圖片,並找到新創建的圖像的顏色的平均顏色
  2. 使用兩for循環。最內側用於平均每條線,次要for循環用於逐像素平均每條線。

我真的很喜歡第一個解決方案的想法,但我不確定它會有多精確。第二種解決方案與他們一樣準確,但看起來非常乏味。我也相信getColor這個命令是大規模的處理器密集型的,比如我(這個平均值大概是每秒640到1920次),如果我錯了,請糾正我的錯誤。由於這種方法會佔用很多CPU,所以我想使用相當高效的算法。

+0

*「我不確定它會有多準確。」*您的測試表明瞭什麼? *「看起來令人難以置信的乏味。」*爲了輸入它,還是讓它運行?對於前者,使用IDE,對於後者,首先對其進行概要分析,因爲我懷疑您描述的縮放類型實例需要同樣多的處理。 –

回答

1

這取決於你的平均水平。如果你有一半的像素是紅色的,一半是藍色的,平均值是紫色的?在這種情況下,我認爲你可以嘗試添加所有的值並將其除以你有多少像素。

但是,我懷疑,而不是平均水平,你想要的主導顏色?

在這種情況下,一種替代方法可能是將顏色分解爲「桶」(例如,間隔100,或者甚至更稀疏,在極端情況下只有3,一個用於紅色,一個用於綠色,一個用於藍色),並創建一個直方圖(帶有計數的簡單數組)。然後,您將採取計數最多的水桶。

小心點子1.請記住,縮放往往是通過抽樣進行的。既然你有一個非常小的圖像,你已經失去了很多信息。進一步縮小可能只是對幾個像素進行採樣,而不是將它們全部平均。更好地檢查縮放過程正在使用的算法。