Pythonを利用して証明写真の背景色を変更してみる

NeeNetです。

今回はPythonを利用して、証明写真の背景色を変更してみたいと思います。

iPhoneやAndroidで似たようなことができるアプリも存在するのですが、右下にウォーターマークが付いてしまうことも多いので、今回は純粋にPythonのみを用いて実行します。

事前準備

今回、Pythonのモジュールとして rembg を用います。

rembgは以下コマンドでインストール可能です。

$ pip install rembg

rembgとは

rembgは画像から背景を削除するPythonライブラリです。

内部的にはu2netとpymattingというツールを使用しています。

Macでインポートエラーが出る方向け

rembgを使う際に、Macだと以下のエラーが出るケースがあります。

ModuleNotFoundError: No module named '_lzma'

このエラーがでた場合、Homebrewで xz をインストールした後、Pythonを再インストールすることで解消します。(当方はPythonのバージョン管理にasdfを用いているので、その方法を記載しています)

# xzのインストール
$ brew install xz

# pythonの再インストール
$ asdf uninstall python 3.11.6
$ asdf install python 3.11.6

プログラムの実行

今回、証明写真として以下画像を用意しました。(引用元

input.jpg

プログラムは次の通りです。

from rembg import remove
from PIL import Image 


def change_background_color(input_path, output_path, new_color="#FFFFFF"):
    # 画像を読み込んで背景を削除
    img = Image.open(input_path)
    bgless_img = remove(img)

    # 透過部分を指定背景色で置換
    if bgless_img.mode in ('RGBA', 'LA'):
        background = Image.new(bgless_img.mode[:-1], bgless_img.size, new_color) 
        background.paste(bgless_img, bgless_img.split()[-1]) 
        bgless_img = background

    # 保存
    bgless_img.save(output_path)


# 関数の呼び出し
change_background_color("./input.jpg", "./output.jpg", "#FFFFFF")

change_background_color関数の第一引数が入力画像のファイルパス、第二引数が出力画像のファイルパス、第三引数が変更後のカラー指定となっています。

変更後のカラーはデフォルトで白(#FFFFFF)としています。

実行は以下で可能です。

$ python change_bg.py

背景を白として実行した結果は以下の通りです。

output.jpg

背景色を白に変更できていることが分かります。

試しに、他の色も指定してみます。今度は明るいグレーを指定してみます。

output.jpg

こちらも問題なく実行できていることが分かります。

やっていること

やっていることは非常にシンプルで、rembgで背景とオブジェクトを分離した後に、透過部分の情報を指定の背景色で埋めています。

イメージとしてはpngで画像を切り抜いた後に、単一の背景色の画像に貼り付けるイメージに近いと思います。

rembgは人物以外にも適用可能なので、気になった方は他の画像でも試してみて下さい。

まとめ

今回はPythonを利用して証明写真の背景色を変更してみました。

証明写真の背景色を変えたいケースは意外と存在すると思いますので、どなたかの参考になりましたら幸いです。

  • URLをコピーしました!