我想对png图像进行二值化。如果可能的话,我想用Pillow。我见过使用的两种方法:
image_file = Image.open("convert_image.png") # open colour image
image_file = image_file.convert('1') # convert image to black and white
此方法似乎是通过抖动图像来处理填充浅色的区域。我不想要这种行为。例如,如果有一个浅黄色的圆圈,我希望它变成一个黑色的圆圈。
更一般地说,如果一个像素的RGB是(x,y,z),我希望像素变成黑色,如果x<=t或y<=t或z<=t对于某些阈值0
我可以将图像转换为灰度或RGB,然后手动应用阈值测试,但这似乎效率低下。
我看到的第二个方法是:
threshold = 100
im = im2.point(lambda p: p > threshold and 255)
这里的我不知道它是怎么工作的也不知道这里的阈值是什么"和255"。
我正在寻找如何应用方法2或使用Pillow的替代方法的解释。
我认为你需要转换为灰度,应用阈值,然后转换为单色。
image_file = Image.open("convert_iamge.png")
# Grayscale
image_file = image_file.convert('L')
# Threshold
image_file = image_file.point( lambda p: 255 if p > threshold else 0 )
# To mono
image_file = image_file.convert('1')
表达式"p>阈值和255"是Python的一个技巧。"a"one_answers"b"的定义如果a为假,则为"a,否则为"这就会产生&;false &;或"255";为每个像素,而"False"将被计算为0。我的if/else做了同样的事情,但可能更容易读懂。