Python入門トップページ


画像の背景を削除してみよう

はじめに

Python で画像から前景を取り出して背景を削除することが簡単にできるようになりました.2022年に公開されたU-2-Net と呼ばれる畳み込みディープニューラルネットワークのモデルが秀逸です.これはU字型の11のステージからなる畳み込みニューラルネットワークで,興味のある物体を切り抜き,背景を削除します.学習済みモデルも入手可能で,僅か数行のコードだけで実行できます.

準備

Python では rembg パッケージをインストールすると U-2-Net を使った背景削除が可能です.これは pip を使ってインストールできます.

% pip install rembg ⏎

背景削除

プログラムのソースコードが保存されたフォルダの中に,data フォルダがあり,その中に背景を削除したい画像データ (ink.png と golf.png) を設置します.また,背景が削除された前景画像は results フォルダに書き出されるものとします.各フォルダを作成しておいてください.

必要なパッケージをインポートします.


import os
from rembg import remove
from PIL import Image

インクの画像から背景を削除します.わずかなコードで実行できることが確認できます.なお,Windows でも Mac でも動作するようにフォルダとファイルの指定には os モジュールを使用しています.


input_path = os.path.sep.join(['data', 'ink.png'])
output_path = os.path.sep.join(['results', 'rembg_ink.png'])
input = Image.open(input_path)
output = remove(input)
output.save(output_path)
ink.png
ink
rembg_ink.png
rembg_ink

ゴルフスイングの画像からも背景を削除します.(前景とも言えなくもない)ティーマーカーが残っているのと,白色の手袋を着用した左手が消えているようにも見えますが,ほぼ完璧に前景と背景の切り分けに成功しています.


input_path = os.path.sep.join(['data', 'golf.png'])
output_path = os.path.sep.join(['results', 'rembg_golf.png'])
input = Image.open(input_path)
output = remove(input)
output.save(output_path)
golf.png
golf
rembg_golf.png
rembg_golf