見出し画像

Pythonで画像の背景除去

今の画像生成AIは、まだ品質が安定しない印象。
感覚的には、作った画像の8割は捨てている。

ごく一部修正すればすごく良くなるのにという画像もあり、ある時、背景を消したくなってGoogle検索してみた。
そうしたら、写真や画像の背景を消せるアプリはいくつも見つかって。しかも無料で使えるものもあって。

背景を消すのはそんな簡単なものじゃないだろうと思ったのだが。
なにしろ背景を消そうと思ったら、主役の被写体と背景の境目を見つけなければいけないが、そういうプログラムを簡単に作れるとは思えないから。

予想に反して、「そういうプログラム」が簡単に作れることが分かってしまった。


Python のライブラリで「rembg」(remove backgroundの略だろう)というものがあり。これを使うと簡単に画像の背景を削除できることが分かった。

パソコンがあればPythonの実行環境は無料で用意できるし、プログラムはテキストエディタで書けばいいし(無料のVisual Studio Codeを使えばキーワードに色がついて読みやすい)、豊富な数値計算ライブラリがあるので、難しいことを知らなくてもぱっとプログラムが書ける。

Visual Studio Code で開いた Python のプログラム

ということで、rembgを使ってみた。


画像の背景を除去するPythonプログラム

#!python3.12
import sys
import os
from rembg import remove
from PIL import Image

def main( args ):
    CheckArguments( args )
    ProcessImage( args[1], args[2] )
    return


def CheckArguments( args ):
    if len( args ) != 3 :
        print( "The number of arguments is incorrect. Input an imported image file path and an exported image file path." )
    elif False == os.path.isfile( args[1] ) :
        print( "Provide a file name for the first argument." )
    elif False == os.path.isdir( os.path.dirname( args[2] ) ) :
        print( "The output directory does not exist. Confirm whether the second argument is correct." )
    else:
        print( "The input arguments are correct." )
    return


def ProcessImage( source, result ):
    input = Image.open( source ) # 入力画像を開く
    output = remove( input )     # 背景を除去
    output.save( result )        # 出力画像を保存

    print( "remove_background.py has been processed." )
    return


if __name__ == "__main__":
    args = sys.argv
    main( args )

わずか36行。しかも背景除去処理はたった1行、ライブラリに用意されている関数を呼ぶだけ。

output = remove( input )  # 背景を除去

このプログラムを、remove_background.py という名前で保存。


使い方

>py -3.12 remove_background.py Aaa Bbb

   Aaa = 背景除去したい画像ファイルの名前
   Bbb = 背景除去した結果ファイルの名前


py -3.12 remove_background.py .\sample.png .\result.png

remove_background.py と同じフォルダに、背景除去したい画像ファイル「sample.png」を置いておく。
処理が終わると、sample.pngと同じフォルダに「result.png」というファイルが作成されている。


実行環境について

Python のインストールが必要。
上のプログラムは、Windows 11 上で動作確認済み。

  • Pythonのバージョン:3.12.7

  • 必要なライブラリ:rembg、onnxruntime(※)

※rembg を動かすために必要


実験結果

入力画像


出力結果

こんな簡単なプログラムなのに、結果はかなり良好。

失敗しているのは、手前の焚火が一部だけ残っている、いちばん右の少年の脚の周囲がうまく処理できていない(左足の先は背景が残り、左脚は間違って消されている)、いちばん左の少年の右足と左脚の間に背景が残っている、くらい。


これだけの性能をこんなに簡単に、しかも1円も使わずに出せるのなら、確かに無料のアプリがあっても何の不思議もない。


#Python
#プログラミング
#画像編集
#背景除去
#背景透過
#画像生成AI
#AI画像生成


いいなと思ったら応援しよう!