Pillow - 如何使用阈值对图像进行二值化?
Pillow - How to binarize an image with threshold?
我想对 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 OR y<=t OR z<=t 对于某个阈值 0
我可以将图像转换为灰度或 RGB,然后手动应用阈值测试,但这似乎效率不高。
我看到的第二种方法是这样的:
threshold = 100
im = im2.point(lambda p: p > threshold and 255)
来自 here 我不知道这是如何工作的,也不知道这里的阈值是什么或做什么,以及“和 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 > threshhold and 255”是一个 Python 技巧。 “a and b”的定义是“如果a为假则a,否则b”。因此,这将为每个像素生成“False”或“255”,并且“False”将被评估为 0。我的 if/else 以更易读的方式做同样的事情。
我想对 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 OR y<=t OR z<=t 对于某个阈值 0 我可以将图像转换为灰度或 RGB,然后手动应用阈值测试,但这似乎效率不高。 我看到的第二种方法是这样的: 来自 here 我不知道这是如何工作的,也不知道这里的阈值是什么或做什么,以及“和 255”的作用。 我正在寻找有关如何应用方法 2 或使用 Pillow 的替代方法的说明。threshold = 100
im = im2.point(lambda p: p > threshold and 255)
我认为您需要转换为灰度,应用阈值,然后转换为单色。
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 > threshhold and 255”是一个 Python 技巧。 “a and b”的定义是“如果a为假则a,否则b”。因此,这将为每个像素生成“False”或“255”,并且“False”将被评估为 0。我的 if/else 以更易读的方式做同样的事情。