rembgで背景を削除した画像を編集して元の画像と再合成


press
rembgで背景を削除した画像を編集して元の画像と再合成

rembgで背景を削除した画像を編集して元の画像と再合成

YouTubeにアップロードしたrembgで背景を削除する説明動画にコメントをいただいたので、rembgを使った画像処理の続編です。rembgで背景を削除した画像をOpenCVとPillowを使って白黒画像に変換して元の画像と再合成します。

rembgで背景を削除した画像からマスクを作成します。次にオリジナル画像を白黒に変換します。最後に白黒画像に変換した画像をマスク処理(切り抜き)して元の背景と合成します。

白黒画像に変換する部分を左右反転や色調補正などの他の処理に書き換えると表現の幅が広がります。

コードはGitHubリポジトリにあげています。

オリジナル画像
オリジナル画像
マスク
マスク
白黒画像
白黒画像
合成画像
合成画像

開発環境

PC: MacBook Pro (14, 2021)
OS: macOS Monterey 12.0.1
Python: 3.9.1

from rembg import remove
from PIL import Image
import cv2


original_img_path = "images/IMG_5358.png"

input = Image.open(original_img_path)
output = remove(input)
output.save("combine/remove_bg.png")

mask_img_path = "combine/remove-bg.png"
mask_a = cv2.imread(mask_img_path, cv2.IMREAD_UNCHANGED)
mask_a = mask_a[:, :, 3]
cv2.imwrite("combine/mask.png", mask_a)

gray_img = cv2.imread(original_img_path)
gray_img = cv2.cvtColor(gray_img, cv2.COLOR_BGR2GRAY)
gray_img = cv2.cvtColor(gray_img, cv2.COLOR_GRAY2BGR)
cv2.imwrite("combine/gray.png", gray_img)

gray_img_path = "images/gray.png"
mask_path = "images/mask.png"
paste_img = Image.open(gray_img_path)
base_img = Image.open(original_img_path)
mask = Image.open(mask_path)
im = Image.composite(paste_img, base_img, mask)
im.save("combine/composite.png")

解説

from rembg import remove
from PIL import Image
import cv2
ライブラリのインポート

original_img_path = "images/IMG_5358.png"
オリジナル画像のパスを指定

input = Image.open(original_img_path)
画像を開く
output = remove(input)
rembgで背景を削除
output.save("combine/remove_bg.png")
画像を保存

mask_img_path = "combine/remove-bg.png"
背景を削除した画像のパスを指定
mask_a = cv2.imread(mask_img_path, cv2.IMREAD_UNCHANGED)
画像を開く
mask_a = mask_a[:, :, 3]
アルファチャンネルを取得
cv2.imwrite("combine/mask.png", mask_a)
画像を保存

gray_img = cv2.imread(original_img_path)
白黒画像に変換するオリジナル画像のパスを指定
gray_img = cv2.cvtColor(gray_img, cv2.COLOR_BGR2GRAY)
白黒画像(グレースケール)に変換
gray_img = cv2.cvtColor(gray_img, cv2.COLOR_GRAY2BGR)
グレースケールの画像をBGRに戻す
cv2.imwrite("combine/gray.png", gray_img)
画像を保存

gray_img_path = "images/gray.png"
mask_path = "images/mask.png"
画像のパスを指定
paste_img = Image.open(gray_img_path)
base_img = Image.open(original_img_path)
mask = Image.open(mask_path)
画像を開く
im = Image.composite(paste_img, base_img, mask)
白黒、オリジナル画像、マスクを合成(上が白黒に変換したマスク処理したい画像、下がオリジナル画像)
im.save("combine/composite.png")
画像を保存


株式会社ファントムへのお問い合わせ

群馬県でPythonを使ったAIやソフトウェアを開発している株式会社ファントムが運営しています。




    Related Articles

    Python

    iPhoneで撮影した写真をPythonでpngに変換

    iPhoneで撮影した写真をPythonでpngに変換 iPhoneで撮影した写真はHEICという拡張子で保存されます。この画像を利用したり編集したりするにはpngなどの形式に変換が必要なので画像が大量にある場合は1枚1 […]

    Posted on by press
    Python

    PythonでXserverからメール送信

    PythonでXserverからメール送信 レンタルサーバーで処理が終わった時や進捗を確認したいときにPythonでメールを送る方法です。今回はXserverでPythonを実行していますが、他のレンタルサーバーでもホス […]

    Posted on by press

    最新情報をお届けします!

    メーリングリストに登録するとファントムの最新情報をお届けします

    お客様のメールアドレスを共有することはありません