2022年4月3日日曜日

【Pillow】ImageChops.lighter, ImageChops.darkerによる比較明/暗合成

画像処理ライブラリPillowのImageChops.lighterで2つの画像の比較明合成、ImageChops.darkerで2つの画像の比較暗合成ができる。

Pillow(PIL)を使うためにはインポートが必要。PIL.ImageChopsモジュールは通常以下の形式でインポートされる。

from PIL import ImageChops

また合成する画像 'yellow.png'(幅400ピクセルx高さ300ピクセル)、'purple.png'(幅400ピクセルx高さ300ピクセル) は以下

'yellow.png'



'purple.png'





1. 比較明合成/比較暗合成

ImageChops.lighterImageChops.darkerの書式は以下の通り。image1、image2の各画素値を比較して大きい方(lighter)/小さい方(darker)の画素値からなる新しい画像を生成する。比較はチャンネルごと実施される。Imageは8bitグレースケール(Mode'L')、8bitカラー(Mode'RGB')のいずれか。

PIL.ImageChops.lighter(image1, image2)

PIL.ImageChops.darker(image1, image2)

例の画像をImageChops.lighterで合成する場合。yellow.pngの画素値は(R, G, B) = (255, 255, 0)、purple.pngの画素値は(R, G, B) = (255, 0, 255)で各チャンネルごとに大きい画素値が採用されるため、生成される画像は(R, G, B) = (255, 255, 255)、つまり白になる。

from PIL import Image, ImageChops

image1 = Image.open('yellow.png')
image2 = Image.open('purple.png')

out = ImageChops.lighter(image1, image2)
out.save('lighter.jpg')



例の画像をImageChops.darkerで合成する場合。yellow.pngの画素値は(R, G, B) = (255, 255, 0)、purple.pngの画素値は(R, G, B) = (255, 0, 255)でチャンネルごとに小さい画素値が採用されるため、生成される画像は(R, G, B) = (255, 0, 0)、つまり赤になる。

from PIL import Image, ImageChops

image1 = Image.open('yellow.png')
image2 = Image.open('purple.png')

out = ImageChops.darker(image1, image2)
out.save('darker.jpg')


2. リファレンス

Pillow (PIL Fork) > ImageChops (“Channel Operations”) Module > PIL.ImageChops.lighter(image1, image2)
Pillow (PIL Fork) > ImageChops (“Channel Operations”) Module > PIL.ImageChops.darker(image1, image2)

使用バージョン:Python 3.8.12 / Pillow 9.0.0

0 件のコメント:

コメントを投稿