2021年11月3日水曜日

【Pillow】画像の張り付け(paste)

画像処理ライブラリPillowで画像に別の画像を貼り付けるにはpasteを使う。

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

from PIL import Image

また例に用いる元画像 'leaves.jpg','man.jpg' は以下(フリー写真素材ぱくたそより)

'leaves.jpg'



'man.jpg'






1. pasteの書式

paste の書式は以下の通り。

Image.paste(im, box=None, mask=None)
引数 意味
im 貼り付ける画像
box 貼り付けられる位置。2値のタプルの場合、貼り付ける画像の左上を貼り付けられる画像の(x、y)座標で指定。4値のタプルの場合、貼り付けられる画像の左上右下の座標を指定。
mask マスク画像(オプション)


2. 使用例

im1('leaves.jpg')の座標(100, 10)に、im2('man.jpg')を貼り付ける場合。

from PIL import Image

im1 = Image.open('leaves.jpg')
im2 = Image.open('man.jpg')

im1.paste(im2, (100, 10))
im1.save('paste.jpg')

実行結果





mask(8ビットRGBカラー)用画像には二値画像(白黒)、モノトーン画像(グレースケール)、アルファチャンネル付き画像が使用できる。画像サイズは貼り付ける画像と同じにする。マスクが二値画像の場合はピクセル値が0であれば貼り付けられる画像(ベース画像)が、1であれば貼り付ける画像のピクセルが採用され貼り付けられる。グレースケール画像ではピクセルの値0~255、アルファチャンネル付き画像ではアルファチャンネルの値0~255に応じて、ベース画像と貼り付ける画像が混合される。

貼り付ける画像をネガポジ反転し二値化した画像をマスクに用いた場合。男性の周囲の余白はピクセル値が0となり貼り付けられる画像(ベース画像)のピクセルが採用される。

from PIL import Image, ImageOps

im1 = Image.open('leaves.jpg')
im2 = Image.open('man.jpg')
mask =  (ImageOps.invert(im2.convert('L'))).convert('1')
im1.paste(im2, (100, 10), mask)
im1.save('paste.jpg')

実行結果





3. リファレンス

Pillow (PIL Fork) > Image Module > The Image Class > Image.paste(im, box=None, mask=None)

使用バージョン:Python 3.8.8 / Pillow 8.2.0

0 件のコメント:

コメントを投稿