Pythonで加算平均合成
ぽんハウス フォトギャラリーで年毎のサムネイルに使っているのは、中に入っているその年に撮った写真の合成です。もしかしたら、その年の写真の傾向がわかるかも?と思い、最初の頃はGraphic Converterの合成機能を使い、以降はPhotoshopでレイヤーとして全部読み込んで合成していましたが、ちょっと面倒…。そこで、指定フォルダ下のJPEGファイルを加算平均合成してファイルにまとめるPythonコードで、サクッと済ませることにしました。
ファイルパスと保存パスは環境に合わせて変更してください。
NumPyとPillowのライブラリが必要です。
import osimport numpy as npfrom PIL import Image
# 画像が入ってるフォルダのパスinput_dir = '/Users/XXX/Desktop/XXXX' # ←合成したい画像が入ってるフォルダ名に変更
# 保存先output_path = '/Users/XXX/Desktop/result.jpg'# ←合成した画像の保存場所に変更
# JPEG画像ファイル一覧を取得img_files = [f for f in os.listdir(input_dir) if f.lower().endswith('.jpg') or f.lower().endswith('.jpeg')]
if not img_files: raise ValueError('フォルダ内にJPEG画像がありません…!')
# 画像をnumpy配列として読み込み&float化imgs = []for f in img_files: img = Image.open(os.path.join(input_dir, f)).convert('RGB') imgs.append(np.asarray(img, dtype=np.float32))
# すべての画像サイズを基準画像(1枚目)に揃える(サイズ違いがある場合用)base_shape = imgs[0].shapeimgs = [img if img.shape == base_shape else np.array(Image.fromarray(img.astype(np.uint8)).resize((base_shape[1], base_shape[0]))) for img in imgs]
# 配列を加算平均avg_img = np.mean(imgs, axis=0).astype(np.uint8)
# 画像に戻して保存result = Image.fromarray(avg_img)result.save(output_path)
print(f'合成画像を保存しました: {output_path}')