2016-09-06 331 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

感谢这个简单的解决方案:)! –