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

    PythonとGhostscriptでPDFを軽量化

    PythonとGhostscriptでPDFを軽量化 書類の添付などでブラウザからPDFをアップロードする際に数MB以下にしないとアップロードできないことがありますが、印刷用に作成したPDFや複数画像を一枚にまとめたPD […]

    Posted on by press
    Python

    Pythonでディレクトリ内のファイルを取得する

    globモジュールを使いディレクトリ内にあるファイルを取得する方法です。 ディレクトリ構造 まずはディレクトリ内のjpgを全て取得します。 directory = (os.getcwd())で現在のディレクトリのパスを取 […]

    Posted on by press

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

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

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