2015-05-06 27 views
-2

我正在嘗試做類似this的事情。我需要從圖像中提取每個點的相對光強度,我想知道如何去做。如何獲得最能代表光強度的黑白圖像?

我想到的第一件事就是將圖像轉換成黑白圖像。我發現了三種不同的算法here。我使用自己的圖像作爲測試來嘗試Python圖像庫image.convert('1')中的所有三種算法和內置函數。前兩種算法對黑暗部分(如我的頭髮,眉毛等)給出了一些奇怪的結果;第三種算法'luminosity'的結果與我使用某些圖像處理軟件的結果非常相似。而Python內置的只是給了一些荒謬的東西。我不確定哪一個是光強度的最佳表現,而且我不確定相機是否已經爲不同的圖像做了一些自我調整,當圖像都有不同的光線方向時。

+0

好的隊友,你非常不好聽,低俗,這不是很好。 'python內置的一個只是給了一些東西s ***'告訴我們**沒有任何**。這同樣適用於'變暗部分的奇怪結果'和'一些圖像處理'。具體一點,告訴我們你已經嘗試了什麼,具體問題是什麼,以及你如何試圖解決它們。附上代碼或圖片有幫助。 –

+0

嘗試轉換爲HSL,然後使用L .... http://stackoverflow.com/questions/2353211/hsl-to-rgb-color-conversion –

回答

1

FWIW,有2個版本的PIL。原來的那個比較過時,但有一個叫做Pillow的新叉子。希望你使用Pillow,但爲了有效地使用它,你需要熟悉the Pillow docs

image.convert('1')你想要的這裏:它的圖像轉換爲1位黑色&白色,即,沒有灰色,只有純黑色和純白色。要使用的正確圖像mode'L'(亮度),它爲您提供了8位灰度圖像。 該PIL /枕頭用來執行該轉換公式是

L = R * 299/1000 + G * 587/1000 + B * 114/1000

這些係數是相當普遍:例如,他們已經習慣由ppmtopgm; IIRC,自從NTSC模擬電視時代以來,它們一直在使用。但是,它們可能不適合其他色彩空間(主要是由於與伽馬校正有關的問題)。有關其他幾個係數集,請參閱關於YUV colour space &鏈接文章的維基百科文章。

當然,通過對getdata返回的像素元組進行操作,使用其他係數進行轉換很容易,但這比使用內置轉換要慢。