グリーンバックの人物を背景と合成する
クロマキー合成では人の肌の色から遠いブルーやグリーンの背景を使って人物を撮影し、背景色の青や緑を透明にして別画像に合成します。
グリーンバックの人物写真から人物を切り抜いて風景写真に張り付けます。人物写真の人物部分を黒、グリーンの背景を白に変換したマスク画像を使ってPillowのImage.compositeにより風景画像の上に人物を合成します。
関連記事
コラージュ写真を作る
コラージュ写真を作る
画像にキラキラした文字を入れる
環境
- windows10 home
- jupyter notebook 6.3.0
- Python 3.8.8
- Pillow 8.2.0
準備
画像ファイルはフリー写真素材ぱくたそから2つの画像をダウンロードさせていただき、640x400のサイズに変形後、jupyter notebookファイル(.ipynb)と同じディレクトリに、ファイル名'shopping.jpg','czech.jpg'で保存しました。グリーンバックの画像'shopping.jpg'の人物のみを切り抜いてチェコの街の風景に貼り付けます。
shopping.jpg
czech.jpg
コード
グリーンバックの写真をHSV色空間に変換し、pointメソッドにより色相Hが緑の範囲を黒、それ以外を白としたマスク画像を作ります。compositeメソッドでマスク画像の黒の部分には背景の写真を、白の部分には人物の写真を合成します。
from PIL import Image # 画像の読み出し im1 = Image.open('shopping.jpg') im2 = Image.open('czech.jpg') # グリーンバックの画像をHSV変換 im1_hsv = im1.convert('HSV') # HSV画像をチャンネル別に分割 source = im1_hsv.split() # Hが99から108の範囲を採用し画素値を255としてマスク画像を作成 mask = source[0].point(lambda i: 99< i < 108 and 255) # マスク画像の白にim2、マスク画像の黒部分にim1を割り当てて合成 im = Image.composite(im2, im1, mask) # 画像の保存 im.save('shopping_in_czech.jpg')
実行結果
女性が切り抜かれてチェコの街並みに合成されました。
以下のサイトを参考にさせていただきました
GeeksforGeeks >> Python PIL | Image.point() method