import PIL.Image as Image import PIL.ImageDraw as ImageDraw import PIL.ImageFilter as ImageFilter import PIL.ImageStat as ImageStat import PIL.ImageChops as ImageChops image = Image.open('output2.png').convert('RGB') mask = Image.open('mask.png').convert('RGB') mask = mask.point([0] * 256 + [0] * 255 + [255] + [0] * 256) mask = mask.convert('1') mask2 = mask.filter(ImageFilter.MaxFilter(5)) mask = ImageChops.difference(mask2, mask) stat = ImageStat.Stat(image, mask) threshold = stat.sum[0] / stat.count[0] image = image.point([255 * (i > threshold) for i in range(256)] * 3) image.save('output3.png')