Python:灰度图像:除了黑色像素外,使所有内容都变白

时间:2016-09-06 22:29:50

标签: python image performance

我尝试打开(已经是灰度)图像并将所有非黑色像素更改为白色像素。我实现了以下代码:

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

使用其他一些图像效果很好。我做错了什么?我认为浮点在这里不应该成为一个大问题,因为这段代码不需要很高的计算精度才能工作。

非常感谢

1 个答案:

答案 0 :(得分:2)

toimage需要一个字节数组,所以转换为uint8而不是int:

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

如果输出中混合了黑白像素,我似乎适用于int,但如果它们都是白色的话,则不然。我在文档中找不到任何解释。