Python入門トップページ


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

はじめに

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

準備

Python では rembg パッケージをインストールすると U-2-Net を使った背景削除が可能です.これは pip を使ってインストールできますが,その他のパッケージのバージョンが異なると rembg のインストールに失敗することがあります.そのような場合は次の手順で仮想環境を作成すれば良いでしょう.

まず,仮想環境の一覧を確認します.すると base 環境だけがインストールされていることが分かります.

(base) C:\Users\UserName\Documents>conda env list ⏎
# conda environments:
#
base                  *  C:\ProgramData\anaconda3


(base) C:\Users\UserName\Documents>

環境名を py312rembg として,Python のバージョン 3.12 の環境を作成します.

(base) C:\Users\UserName\Documents>conda create -n py312rembg python=3.12 ⏎
Channels:
 - defaults
Platform: win-64
Collecting package metadata (repodata.json): done
Solving environment: done

## Package Plan ##

  environment location: C:\ProgramData\anaconda3\envs\py312rembg

  added / updated specs:
    - python=3.12


The following packages will be downloaded:

    package                    |            build
    ---------------------------|-----------------
    expat-2.7.1                |       h8ddb27b_0         259 KB
    pip-25.1                   |     pyhc872135_2         1.3 MB
    python-3.12.11             |       h716150d_0        16.5 MB
    setuptools-78.1.1          |  py312haa95532_0         2.2 MB
    tk-8.6.14                  |       h5e9d12e_1         3.5 MB
    tzdata-2025b               |       h04d1e81_0         116 KB
    vc-14.42                   |       haa95532_5          11 KB
    vs2015_runtime-14.42.34433 |       hbfb602d_5         1.2 MB
    wheel-0.45.1               |  py312haa95532_0         177 KB
    xz-5.6.4                   |       h4754444_1         280 KB
    ------------------------------------------------------------
                                           Total:        25.5 MB

The following NEW packages will be INSTALLED:

  bzip2              pkgs/main/win-64::bzip2-1.0.8-h2bbff1b_6
  ca-certificates    pkgs/main/win-64::ca-certificates-2025.2.25-haa95532_0
  expat              pkgs/main/win-64::expat-2.7.1-h8ddb27b_0
  libffi             pkgs/main/win-64::libffi-3.4.4-hd77b12b_1
  openssl            pkgs/main/win-64::openssl-3.0.16-h3f729d1_0
  pip                pkgs/main/noarch::pip-25.1-pyhc872135_2
  python             pkgs/main/win-64::python-3.12.11-h716150d_0
  setuptools         pkgs/main/win-64::setuptools-78.1.1-py312haa95532_0
  sqlite             pkgs/main/win-64::sqlite-3.45.3-h2bbff1b_0
  tk                 pkgs/main/win-64::tk-8.6.14-h5e9d12e_1
  tzdata             pkgs/main/noarch::tzdata-2025b-h04d1e81_0
  vc                 pkgs/main/win-64::vc-14.42-haa95532_5
  vs2015_runtime     pkgs/main/win-64::vs2015_runtime-14.42.34433-hbfb602d_5
  wheel              pkgs/main/win-64::wheel-0.45.1-py312haa95532_0
  xz                 pkgs/main/win-64::xz-5.6.4-h4754444_1
  zlib               pkgs/main/win-64::zlib-1.2.13-h8cc25b3_1


Proceed ([y]/n)? y ⏎

done
#
# To activate this environment, use
#
#     $ conda activate py312rembg
#
# To deactivate an active environment, use
#
#     $ conda deactivate


(base) C:\Users\UserName\Documents>

もう一度,仮想環境の一覧を確認し,py312rembg という環境がインストールされていることを確認します.

(base) C:\Users\UserName\Documents>conda env list ⏎
# conda environments:
#
base                  *  C:\ProgramData\anaconda3
py312rembg               C:\ProgramData\anaconda3\envs\py312rembg


(base) C:\Users\UserName\Documents>

py312rembg 環境を有効化します.

(base) C:\Users\UserName\Documents>conda activate py312rembg ⏎

(py312rembg) C:\Users\UserName\Documents>

環境が切り替わっていることを確認します.

(py312rembg) C:\Users\UserName\Documents>conda env list ⏎
# conda environments:
#
base                     C:\ProgramData\anaconda3
py312rembg            *  C:\ProgramData\anaconda3\envs\py312rembg


(py312rembg) C:\Users\UserName\Documents>

インストールされているパッケージを確認します.まだほぼ何もインストールされていないことが分かります.

(py312rembg) C:\Users\UserName\Documents>pip list ⏎
Package    Version
---------- -------
pip        25.1
setuptools 78.1.1
wheel      0.45.1

(py312rembg) C:\Users\UserName\Documents>

rembg パッケージをインストールします.

(py312rembg) C:\Users\UserName\Documents>pip install rembg ⏎
Collecting rembg
  Downloading rembg-2.0.67-py3-none-any.whl.metadata (21 kB)
Collecting jsonschema (from rembg)
  Downloading jsonschema-4.24.0-py3-none-any.whl.metadata (7.8 kB)
Collecting numpy (from rembg)
  Downloading numpy-2.3.1-cp312-cp312-win_amd64.whl.metadata (60 kB)
Collecting opencv-python-headless (from rembg)
  Downloading opencv_python_headless-4.12.0.88-cp37-abi3-win_amd64.whl.metadata (20 kB)
Collecting pillow (from rembg)
  Downloading pillow-11.3.0-cp312-cp312-win_amd64.whl.metadata (9.2 kB)
Collecting pooch (from rembg)
  Downloading pooch-1.8.2-py3-none-any.whl.metadata (10 kB)
Collecting pymatting (from rembg)
  Downloading pymatting-1.1.14-py3-none-any.whl.metadata (7.7 kB)
Collecting scikit-image (from rembg)
  Downloading scikit_image-0.25.2-cp312-cp312-win_amd64.whl.metadata (14 kB)
Collecting scipy (from rembg)
  Downloading scipy-1.16.0-cp312-cp312-win_amd64.whl.metadata (60 kB)
Collecting tqdm (from rembg)
  Downloading tqdm-4.67.1-py3-none-any.whl.metadata (57 kB)
Collecting attrs>=22.2.0 (from jsonschema->rembg)
  Downloading attrs-25.3.0-py3-none-any.whl.metadata (10 kB)
Collecting jsonschema-specifications>=2023.03.6 (from jsonschema->rembg)
  Downloading jsonschema_specifications-2025.4.1-py3-none-any.whl.metadata (2.9 kB)
Collecting referencing>=0.28.4 (from jsonschema->rembg)
  Downloading referencing-0.36.2-py3-none-any.whl.metadata (2.8 kB)
Collecting rpds-py>=0.7.1 (from jsonschema->rembg)
  Downloading rpds_py-0.26.0-cp312-cp312-win_amd64.whl.metadata (4.3 kB)
Collecting typing-extensions>=4.4.0 (from referencing>=0.28.4->jsonschema->rembg)
  Downloading typing_extensions-4.14.1-py3-none-any.whl.metadata (3.0 kB)
Collecting numpy (from rembg)
  Downloading numpy-2.2.6-cp312-cp312-win_amd64.whl.metadata (60 kB)
Collecting platformdirs>=2.5.0 (from pooch->rembg)
  Downloading platformdirs-4.3.8-py3-none-any.whl.metadata (12 kB)
Collecting packaging>=20.0 (from pooch->rembg)
  Downloading packaging-25.0-py3-none-any.whl.metadata (3.3 kB)
Collecting requests>=2.19.0 (from pooch->rembg)
  Downloading requests-2.32.4-py3-none-any.whl.metadata (4.9 kB)
Collecting charset_normalizer<4,>=2 (from requests>=2.19.0->pooch->rembg)
  Downloading charset_normalizer-3.4.2-cp312-cp312-win_amd64.whl.metadata (36 kB)
Collecting idna<4,>=2.5 (from requests>=2.19.0->pooch->rembg)
  Downloading idna-3.10-py3-none-any.whl.metadata (10 kB)
Collecting urllib3<3,>=1.21.1 (from requests>=2.19.0->pooch->rembg)
  Downloading urllib3-2.5.0-py3-none-any.whl.metadata (6.5 kB)
Collecting certifi>=2017.4.17 (from requests>=2.19.0->pooch->rembg)
  Downloading certifi-2025.7.9-py3-none-any.whl.metadata (2.4 kB)
Collecting numba!=0.49.0 (from pymatting->rembg)
  Downloading numba-0.61.2-cp312-cp312-win_amd64.whl.metadata (2.9 kB)
Collecting llvmlite<0.45,>=0.44.0dev0 (from numba!=0.49.0->pymatting->rembg)
  Downloading llvmlite-0.44.0-cp312-cp312-win_amd64.whl.metadata (5.0 kB)
Collecting networkx>=3.0 (from scikit-image->rembg)
  Downloading networkx-3.5-py3-none-any.whl.metadata (6.3 kB)
Collecting imageio!=2.35.0,>=2.33 (from scikit-image->rembg)
  Downloading imageio-2.37.0-py3-none-any.whl.metadata (5.2 kB)
Collecting tifffile>=2022.8.12 (from scikit-image->rembg)
  Downloading tifffile-2025.6.11-py3-none-any.whl.metadata (32 kB)
Collecting lazy-loader>=0.4 (from scikit-image->rembg)
  Downloading lazy_loader-0.4-py3-none-any.whl.metadata (7.6 kB)
Collecting colorama (from tqdm->rembg)
  Downloading colorama-0.4.6-py2.py3-none-any.whl.metadata (17 kB)
Downloading rembg-2.0.67-py3-none-any.whl (44 kB)
Downloading jsonschema-4.24.0-py3-none-any.whl (88 kB)
Downloading attrs-25.3.0-py3-none-any.whl (63 kB)
Downloading jsonschema_specifications-2025.4.1-py3-none-any.whl (18 kB)
Downloading referencing-0.36.2-py3-none-any.whl (26 kB)
Downloading rpds_py-0.26.0-cp312-cp312-win_amd64.whl (234 kB)
Downloading typing_extensions-4.14.1-py3-none-any.whl (43 kB)
Downloading opencv_python_headless-4.12.0.88-cp37-abi3-win_amd64.whl (38.9 MB)
   ---------------------------------------- 38.9/38.9 MB 91.6 MB/s eta 0:00:00
Downloading numpy-2.2.6-cp312-cp312-win_amd64.whl (12.6 MB)
   ---------------------------------------- 12.6/12.6 MB 79.2 MB/s eta 0:00:00
Downloading pillow-11.3.0-cp312-cp312-win_amd64.whl (7.0 MB)
   ---------------------------------------- 7.0/7.0 MB 71.5 MB/s eta 0:00:00
Downloading pooch-1.8.2-py3-none-any.whl (64 kB)
Downloading packaging-25.0-py3-none-any.whl (66 kB)
Downloading platformdirs-4.3.8-py3-none-any.whl (18 kB)
Downloading requests-2.32.4-py3-none-any.whl (64 kB)
Downloading charset_normalizer-3.4.2-cp312-cp312-win_amd64.whl (105 kB)
Downloading idna-3.10-py3-none-any.whl (70 kB)
Downloading urllib3-2.5.0-py3-none-any.whl (129 kB)
Downloading certifi-2025.7.9-py3-none-any.whl (159 kB)
Downloading pymatting-1.1.14-py3-none-any.whl (54 kB)
Downloading numba-0.61.2-cp312-cp312-win_amd64.whl (2.8 MB)
   ---------------------------------------- 2.8/2.8 MB 40.8 MB/s eta 0:00:00
Downloading llvmlite-0.44.0-cp312-cp312-win_amd64.whl (30.3 MB)
   ---------------------------------------- 30.3/30.3 MB 91.7 MB/s eta 0:00:00
Downloading scipy-1.16.0-cp312-cp312-win_amd64.whl (38.4 MB)
   ---------------------------------------- 38.4/38.4 MB 94.0 MB/s eta 0:00:00
Downloading scikit_image-0.25.2-cp312-cp312-win_amd64.whl (12.9 MB)
   ---------------------------------------- 12.9/12.9 MB 81.0 MB/s eta 0:00:00
Downloading imageio-2.37.0-py3-none-any.whl (315 kB)
Downloading lazy_loader-0.4-py3-none-any.whl (12 kB)
Downloading networkx-3.5-py3-none-any.whl (2.0 MB)
   ---------------------------------------- 2.0/2.0 MB 37.7 MB/s eta 0:00:00
Downloading tifffile-2025.6.11-py3-none-any.whl (230 kB)
Downloading tqdm-4.67.1-py3-none-any.whl (78 kB)
Downloading colorama-0.4.6-py2.py3-none-any.whl (25 kB)
Installing collected packages: urllib3, typing-extensions, rpds-py, platformdirs, pillow, packaging, numpy, networkx, llvmlite, idna, colorama, charset_normalizer, certifi, attrs, tqdm, tifffile, scipy, requests, referencing, opencv-python-headless, numba, lazy-loader, imageio, scikit-image, pymatting, pooch, jsonschema-specifications, jsonschema, rembg
Successfully installed attrs-25.3.0 certifi-2025.7.9 charset_normalizer-3.4.2 colorama-0.4.6 idna-3.10 imageio-2.37.0 jsonschema-4.24.0 jsonschema-specifications-2025.4.1 lazy-loader-0.4 llvmlite-0.44.0 networkx-3.5 numba-0.61.2 numpy-2.2.6 opencv-python-headless-4.12.0.88 packaging-25.0 pillow-11.3.0 platformdirs-4.3.8 pooch-1.8.2 pymatting-1.1.14 referencing-0.36.2 rembg-2.0.67 requests-2.32.4 rpds-py-0.26.0 scikit-image-0.25.2 scipy-1.16.0 tifffile-2025.6.11 tqdm-4.67.1 typing-extensions-4.14.1 urllib3-2.5.0

(py312rembg) C:\Users\UserName\Documents>

onnxruntime を別途インストールしなければ rembg が動作しないことがあるので,その場合は onnxruntime をインストールします.また,Jupyter Lab を利用するのでこれもインストールしておきます.

(py312rembg) C:\Users\UserName\Documents>pip install onnxruntime ⏎

(py312rembg) C:\Users\UserName\Documents>pip install jupyterlab ⏎

(py312rembg) C:\Users\UserName\Documents>

(py312rembg) C:\Users\UserName\Documents>pip list ⏎
Package                   Version
------------------------- --------------
anyio                     4.9.0
argon2-cffi               25.1.0
argon2-cffi-bindings      21.2.0
arrow                     1.3.0
asttokens                 3.0.0
async-lru                 2.0.5
attrs                     25.3.0
babel                     2.17.0
beautifulsoup4            4.13.4
bleach                    6.2.0
certifi                   2025.7.9
cffi                      1.17.1
charset-normalizer        3.4.2
colorama                  0.4.6
coloredlogs               15.0.1
comm                      0.2.2
debugpy                   1.8.14
decorator                 5.2.1
defusedxml                0.7.1
executing                 2.2.0
fastjsonschema            2.21.1
flatbuffers               25.2.10
fqdn                      1.5.1
h11                       0.16.0
httpcore                  1.0.9
httpx                     0.28.1
humanfriendly             10.0
idna                      3.10
imageio                   2.37.0
ipykernel                 6.29.5
ipython                   9.4.0
ipython_pygments_lexers   1.1.1
isoduration               20.11.0
jedi                      0.19.2
Jinja2                    3.1.6
json5                     0.12.0
jsonpointer               3.0.0
jsonschema                4.24.0
jsonschema-specifications 2025.4.1
jupyter_client            8.6.3
jupyter_core              5.8.1
jupyter-events            0.12.0
jupyter-lsp               2.2.5
jupyter_server            2.16.0
jupyter_server_terminals  0.5.3
jupyterlab                4.4.4
jupyterlab_pygments       0.3.0
jupyterlab_server         2.27.3
lazy_loader               0.4
llvmlite                  0.44.0
MarkupSafe                3.0.2
matplotlib-inline         0.1.7
mistune                   3.1.3
mpmath                    1.3.0
nbclient                  0.10.2
nbconvert                 7.16.6
nbformat                  5.10.4
nest-asyncio              1.6.0
networkx                  3.5
notebook_shim             0.2.4
numba                     0.61.2
numpy                     2.2.6
onnxruntime               1.22.0
opencv-python-headless    4.12.0.88
overrides                 7.7.0
packaging                 25.0
pandocfilters             1.5.1
parso                     0.8.4
pillow                    11.3.0
pip                       25.1
platformdirs              4.3.8
pooch                     1.8.2
prometheus_client         0.22.1
prompt_toolkit            3.0.51
protobuf                  6.31.1
psutil                    7.0.0
pure_eval                 0.2.3
pycparser                 2.22
Pygments                  2.19.2
PyMatting                 1.1.14
pyreadline3               3.5.4
python-dateutil           2.9.0.post0
python-json-logger        3.3.0
pywin32                   310
pywinpty                  2.0.15
PyYAML                    6.0.2
pyzmq                     27.0.0
referencing               0.36.2
rembg                     2.0.67
requests                  2.32.4
rfc3339-validator         0.1.4
rfc3986-validator         0.1.1
rpds-py                   0.26.0
scikit-image              0.25.2
scipy                     1.16.0
Send2Trash                1.8.3
setuptools                78.1.1
six                       1.17.0
sniffio                   1.3.1
soupsieve                 2.7
stack-data                0.6.3
sympy                     1.14.0
terminado                 0.18.1
tifffile                  2025.6.11
tinycss2                  1.4.0
tornado                   6.5.1
tqdm                      4.67.1
traitlets                 5.14.3
types-python-dateutil     2.9.0.20250708
typing_extensions         4.14.1
uri-template              1.3.0
urllib3                   2.5.0
wcwidth                   0.2.13
webcolors                 24.11.1
webencodings              0.5.1
websocket-client          1.8.0
wheel                     0.45.1

(py312rembg) C:\Users\UserName\Documents>

Jupyter Lab を起動します.

(py312rembg) C:\Users\UserName\Documents>jupyter lab ⏎

背景削除

プログラムのソースコードが保存されたフォルダの中に,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