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

    Django

    40分でUbuntu Nginx PostgreSQL Django Gunicornの環境構築

    40分でUbuntu Nginx PostgreSQL Django Gunicornの環境構築 VPSへのログイン(新規タブ) OSの初期設定(アップデート、アップグレード) 新規ユーザーを追加 新しく追加したユーザー […]

    Posted on by press
    Python

    PythonのRequestsを使ってSlackに通知

    PythonのRequestsを使ってSlackに通知 フォームから送られた内容やプログラムの処理結果や途中結果をSlackに通知する方法です。 以下のコードのBOT USER TOKENとCHANNEL NAMEを任意 […]

    Posted on by press

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

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

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