Pillow -如何对带有阈值的图像进行二值化?



我想对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<255>

我可以将图像转换为灰度或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做了同样的事情,但可能更容易读懂。

相关内容

  • 没有找到相关文章

最新更新