Python, Pillowで画像をネガポジ反転(画素値を逆転)
Pythonの画像処理ライブラリPillow(PIL)のImageOpsモジュールに、画像をネガポジ反転(画素値を逆転)する関数invert()が用意されている。
ImageChopsモジュールにも同様の関数がある。
処理の中身は単純で、各画素の値を最大値(8ビットの場合は255)から引いた値に置き換えているだけ。例えば、0は255、64は191、255は0となる。
Pillow(PIL)のインストール、基本的な使い方などは以下の記事参照。
OpenCVなどでNumPy配列ndarrayとして画像を読み込んだ場合のネガポジ反転は以下の記事の処理例を参照。
コード例
画像を読み込みinvert()を呼ぶだけ。
from PIL import Image, ImageOps
im = Image.open('data/src/lena.jpg')
im_invert = ImageOps.invert(im)
im_invert.save('data/dst/lena_invert.jpg', quality=95)
source: pillow_invert.py

透過pngをopen()で読み込むとmodeがRGBAとなり正しく処理されないので、convert()でRGBに変換する。
most operators only work on L and RGB images.
ImageOps Module — Pillow (PIL Fork) 4.4.0.dev0 documentation
im = Image.open('data/src/horse.png').convert('RGB')
im_invert = ImageOps.invert(im)
im_invert.save('data/dst/horse_invert.png')
source: pillow_invert.py
