Pythonで画像の背景除去
今の画像生成AIは、まだ品質が安定しない印象。
感覚的には、作った画像の8割は捨てている。
ごく一部修正すればすごく良くなるのにという画像もあり、ある時、背景を消したくなってGoogle検索してみた。
そうしたら、写真や画像の背景を消せるアプリはいくつも見つかって。しかも無料で使えるものもあって。
背景を消すのはそんな簡単なものじゃないだろうと思ったのだが。
なにしろ背景を消そうと思ったら、主役の被写体と背景の境目を見つけなければいけないが、そういうプログラムを簡単に作れるとは思えないから。
予想に反して、「そういうプログラム」が簡単に作れることが分かってしまった。
Python のライブラリで「rembg」(remove backgroundの略だろう)というものがあり。これを使うと簡単に画像の背景を削除できることが分かった。
パソコンがあればPythonの実行環境は無料で用意できるし、プログラムはテキストエディタで書けばいいし(無料のVisual Studio Codeを使えばキーワードに色がついて読みやすい)、豊富な数値計算ライブラリがあるので、難しいことを知らなくてもぱっとプログラムが書ける。
ということで、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画像生成