2014-04-06 13 views
4

我正在尋找一種方法來總和圖像的所有像素的顏色值。我需要這個從它的表面亮度圖像估計一個明亮的光源(比如遙遠的星系)的總光通量。 任何人都請幫助我如何總結圖像的所有像素的顏色值。圖像的色值總和

例如: 以下圖像的每個像素具有在1之間0至 顏色值但是,當我與每個像素我得到的imread顏色值讀出的圖像是3個元素的陣列。我在matplotlib中很新,我不知道如何將該數組轉換爲0到1的單個值並添加它們。

enter image description here

回答

6

如果你有PIL圖像,然後你可以轉換爲灰度(「亮度」)是這樣的:

from PIL import Image 
col = Image.open('sample.jpg') 
gry = col.convert('L') # returns grayscale version. 

如果你想OT有過色彩的方式增加了更多的控制,轉換爲numpy的陣列第一:

arr = np.asarray(col) 
tot = arr.sum(-1) # sum over color (last) axis 
mn = arr.mean(-1) # or a mean, to keep the same normalization (0-1) 

或者您可以採用不同權重的顏色:

wts = [.25, .25, .5] # in order: R, G, B 
tot = (arr*wts).sum(-1) # now blue has twice the weight of red and green 

對於大型陣列,這相當於最後一行和更快,但可能更難讀:

tot = np.einsum('ijk, k -> ij', arr, wts) 

的上述所有加起來的顏色的每個像素的,至將彩色圖像轉換爲灰度(亮度)圖像。下面將加起來所有的像素起來看看積分整個圖像的:

tot = arr.sum(0).sum(0) # first sums all the rows, second sums all the columns 

如果你有一個彩色圖像,tot仍會有三個值。如果你的圖像是灰度的,它將是一個單一的值。如果你想的平均值,只是mean替換sum

mn = arr.mean(0).mean(0) 
+0

謝謝askewchan的回覆。我想,我無法正確解釋我的需要。我爲此感到抱歉。我實際上想要估計0-1範圍內圖像的每個像素的顏色。在這一刻,用imread讀取我的圖像後,我得到了每個像素的數值。說,我讀過,d = imread('i.png')。然後我得到d [0,0] =數組([0.27843139,0.27843139,0.85882354],dtype = float32)。但我想要的顏色比例尺,例如d [0,0] = 0.4。然後,我想添加d [i,j](i,j分別從0到nrows和ncols)的值,​​我是指所有像素。 – user3503692

+0

你有一個彩色圖像:當你看一個像素('d [0,0]')時,你看到的三個值是紅色,綠色和藍色通道的值。如果您想爲每個像素設置一個值,您必須以某種方式將三個顏色通道添加或平均到一個通道(灰度/亮度)。我已經向你展示了幾種方法來做到這一點。加權('wts')版本可以最大限度地控制色彩添加/平均的方式。我在回答結尾處添加了一個部分,以向您展示如何在完成圖像灰度(單通道)後添加所有_pixels_。 – askewchan

+0

看起來你的形象仍然是色彩。你是如何轉換成灰度的?你保存了結果嗎?你不能只是'im.convert('L')',你必須做'im = im.convert('L')',或者將它保存爲另一個名字,比如'gray = im.convert('L')' – askewchan