2016-09-06 680 views
0

我試圖打開(已經是灰度)圖像並將所有非黑色像素更改爲白色像素。我執行下面的代碼:Python:灰度圖像:使一切變白,除了黑色像素

from scipy.misc import fromimage, toimage 
from PIL import Image 
import numpy as np 

in_path = 'E:\\in.png' 
out_path = 'E:\\out.png' 

# Open gray-scale image 
img = Image.open(in_path).convert('L') 

# Just for testing: The image is saved correct 
#img.save(out_path) 

# Make all non-black colors white 
imp_arr = fromimage(img) 
imp_arr = (np.ceil(imp_arr/255.0) * 255.0).astype(int) 

# Save the image 
img = toimage(imp_arr, mode='L') 
img.save(out_path) 

使所有像素的白色,除了黑色的計算非常簡單,也非常快。對於我的用例來說,它非常重要,它運行速度非常快,因爲這個原因我使用了numpy。出於某種原因,此代碼不適用於所有圖像?

舉例:下圖是輸入。

enter image description here

它包含了一個灰色的矩形,也有白色邊框。輸出應該是一個完整的白色圖像,但由於某種原因,輸出的是黑色圖像:

enter image description here

隨着它工作得非常好一些其它圖像。我做錯了什麼?我認爲在這裏浮點不應該是一個大問題,因爲這個代碼不需要很高的計算精度來工作。

非常感謝您

+0

我沒有看到任何錯誤。我建議把這個計算分解成幾部分,並從每一部分中打印出幾個有代表性的像素。 –

回答

2

toimage需要一個字節數組,所以轉換成不UINT8 INT:

imp_arr = (np.ceil(imp_arr/255.0) * 255.0).astype('uint8') 

我似乎爲int工作,如果有黑色和白色像素的混合輸出,但如果它們都是白色的,則不行。我在文檔中找不到任何解釋。

+0

感謝這個簡單的解決方案:)! –