投稿日:2025-8-2

Pythonで加算平均合成

ぽんハウス フォトギャラリーで年毎のサムネイルに使っているのは、中に入っているその年に撮った写真の合成です。もしかしたら、その年の写真の傾向がわかるかも?と思い、最初の頃はGraphic Converterの合成機能を使い、以降はPhotoshopでレイヤーとして全部読み込んで合成していましたが、ちょっと面倒…。
そこで、指定フォルダ下のJPEGファイルを加算平均合成してファイルにまとめるPythonコードで、サクッと済ませることにしました。
ファイルパスと保存パスは環境に合わせて変更してください。
NumPyとPillowのライブラリが必要です。
import os
import numpy as np
from 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].shape
imgs = [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}')

ジャンル:IT カテゴリ:プログラム
← 記事一覧に戻る