【Python3】Rembgを使用して画像から背景を除去する方法

おはこんばんにちは、せなです。

今回は、Rembgを使用して画像から背景を除去する方法を説明します。

Rembgのインストール

Rembgは、画像から背景を除去することができるライブラリです。

以下のコマンドで、Rembgをインストールできます。

pip install rembg

インストールが完了したら、以下のコマンドを実行してみましょう。

rembg -i input.png -o output.png

RembgはCLIでも使えるので、コマンドラインから実行することができます。
このコマンドは、input.pngという画像から背景を除去して、output.pngという画像を出力します。

実際に入力した画像と出力結果は以下のようになりました。

背景除去前
背景除去前
背景除去後
背景除去後

下の草が残ってしまいましたが、背景は綺麗に消えていますね。

ソースコード

Pythonのソースコードは以下のようになります。

from rembg import remove

def main(input_path, output_path):
    with open(input_path, 'rb') as i:
        with open(output_path, 'wb') as o:
            input = i.read()
            output = remove(input)
            o.write(output)

if __name__ == '__main__':
    input_path = 'input.png'
    output_path = 'output.png'
    main(input_path, output_path)

上記では、open関数を使用していますが、cv2やPILなどの画像処理ライブラリを使用しても問題ありません。
以下は、cv2とPILを使用したサンプルコードです。

from rembg import remove
import cv2

def main(input_path, output_path):
    input = cv2.imread(input_path)
    output = remove(input)
    cv2.imwrite(output_path, output)

if __name__ == '__main__':
    input_path = 'input.png'
    output_path = 'output.png'
    main(input_path, output_path)
from rembg import remove
from PIL import Image

def main(input_path, output_path):
    input = Image.open(input_path)
    output = remove(input)
    output.save(output_path)

if __name__ == '__main__':
    input_path = 'input.png'
    output_path = 'output.png'
    main(input_path, output_path)

まとめ

Rembgは中々便利なライブラリですね。
私のMac(M1)では、768×1024の画像を処理するのに約1秒かかりました。
リアルタイムでの使用は難しいかもですが、時間を問わない画像処理を使用する際には使用してみるのは良さそうですね。

ではでは〜

Python

Posted by sena