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
プログラムの実行
今回、証明写真として以下画像を用意しました。(引用元)
プログラムは次の通りです。
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
背景を白として実行した結果は以下の通りです。
背景色を白に変更できていることが分かります。
試しに、他の色も指定してみます。今度は明るいグレーを指定してみます。
こちらも問題なく実行できていることが分かります。
やっていること
やっていることは非常にシンプルで、rembgで背景とオブジェクトを分離した後に、透過部分の情報を指定の背景色で埋めています。
イメージとしてはpngで画像を切り抜いた後に、単一の背景色の画像に貼り付けるイメージに近いと思います。
rembgは人物以外にも適用可能なので、気になった方は他の画像でも試してみて下さい。
まとめ
今回はPythonを利用して証明写真の背景色を変更してみました。
証明写真の背景色を変えたいケースは意外と存在すると思いますので、どなたかの参考になりましたら幸いです。