画像処理ライブラリPillowのImage.compositeにより2つの画像を、マスク画像の画素値に応じた割合で合成できる。
Pillow(PIL) を使うためにはインポートが必要。 PIL.Imageモジュールは通常以下の形式でインポートされる。
from PIL import Image
1. Image.compositeによる画像合成
composite の書式は以下の通り。
PIL.Image.composite(image1, image2, mask)
image1:合成する1つ目の画像
image2:合成する2つ目の画像。1つ目の画像と同じ色空間とサイズ
mask:マスク画像。モードは1(白黒),L(グレースケール),RGBA(アルファチャンネル付きカラー)のいずれか。2つの画像と同じサイズ。
以下の2つの画像'sea.jpg','stars.jpg'(フリー写真素材ぱくたそより。サイズはどちらも600x400)を合成する例。
海の写真'sea.jpg'をimage1、星空の写真'stars.jpg'をimage2とし、海の写真の空の部分に星空を合成する。マスクに堤防と海の領域が白、空の領域が黒の二値化画像を用いる。
'sea.jpg'
'stars.jpg'
from PIL import Image, ImageDraw image1 = Image.open('sea.jpg') image2 = Image.open('stars.jpg') mask = Image.new('1', image1.size) draw = ImageDraw.Draw(mask) draw.rectangle([(0, 318), (600, 400)], fill='white', outline='white', width=1) out = Image.composite(image1, image2, mask) out.save('composite.jpg')
実行結果
グレースケール画像をマスクに用いるとマスク画像の画素値に応じて2つの画像が合成される。画素値が255の場合にはimage1、画素値が0の場合にはimage2が採用されその中間の値の場合には画素値に応じてimage1,image2がブレンドされる。
同じ画像を一番上の画素値が0、一番下の画素値が255でグラデーションしたグレースケール画像をマスクに用いた場合。
from PIL import Image, ImageDraw image1 = Image.open('sea.jpg') image2 = Image.open('stars.jpg') mask = Image.new('L', (600, 256)) draw = ImageDraw.Draw(mask) for i in range(256): draw.line([(0, i), (600, i)], fill=i, width=1) resize = mask.resize(image1.size) out = Image.composite(image1, image2, resize) out.save('composite.jpg')
実行結果
合成する画像からマスク画像を作成する例。以下の'ohkawa.jpg','togakure.jpg'(フリー写真素材ぱくたそより。サイズはどちらも600x400)を'ohkawa.jpg'から作成したマスク画像で合成する。
'ohkawa.jpg'
'togakure.jpg'
人物画像をグレースケール化しpointメソッドで画素値235未満を255に画素値235以上を0に変換することで人物が白、背景が黒のマスク画像を生成している。
from PIL import Image image1 = Image.open('ohkawa.jpg') image2 = Image.open('togakure.jpg') gray = image1.convert('L') mask = gray.point(lambda i: i < 235 and 255) out = Image.composite(image1, image2, mask) out.save('composite.jpg')
実行結果
2. リファレンス
Pillow (PIL Fork) > Image Module > PIL.Image.composite(image1, image2, mask)
0 件のコメント:
コメントを投稿