我尝试打开(已经是灰度)图像并将所有非黑色像素更改为白色像素。我实现了以下代码:
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。出于某种原因,此代码不适用于所有图像?
示例:以下图像是输入。
它包含一个灰色矩形和一个白色边框。输出应该是完整的白色图像,但由于某种原因,输出是黑色图像:
使用其他一些图像效果很好。我做错了什么?我认为浮点在这里不应该成为一个大问题,因为这段代码不需要很高的计算精度才能工作。
非常感谢
答案 0 :(得分:2)
toimage需要一个字节数组,所以转换为uint8而不是int:
imp_arr = (np.ceil(imp_arr / 255.0) * 255.0).astype('uint8')
如果输出中混合了黑白像素,我似乎适用于int
,但如果它们都是白色的话,则不然。我在文档中找不到任何解释。