前回の記事で、convert メソッドの二値化処理について書きました。
ドキュメントと挙動とが一致するようになったのは有難いことなのですが、
個人的には非0の値が白になる挙動を求めていたので、
そのような処理を書きました。
from PIL import Image, ImageChops img_file = 'test_pattern.png' imgs = Image.open(img_file).split() table = [min(x, 1) for x in range(256)] r1 = imgs[0].point(table, mode='1') g1 = imgs[1].point(table, mode='1') b1 = imgs[2].point(table, mode='1') bimg = ImageChops.logical_or(r1, g1) bimg = ImageChops.logical_or(bimg, b1) bimg.show()
チャネルごとにpoint メソッドで二値化して論理和で合わせるということをしています。
この方法ではなく、グレースケールに変換してpoint メソッドで二値化する方法ならチャネルの分割やマージが要らずpoint メソッドも1回呼ぶだけで済みます。
しかし、例えば(R,G,B)=(1,0,0)なんかは落としてしまいます。
なのでチャネルごとに分けて二値化して論理和をとっています。