↓もし、良かったらSNSでの紹介よろしくお願いします。

【Python&OpenCV】マスク画像で画像の切り抜き・透過

bootstrap

OpenCVでマスク画像(黒い部分)で画像を切り抜く

透過画像

元の画像をマスク画像の黒い領域透過させる方法を紹介します。

サンプルコード(Python2と3に対応)

  • img.png(透過させたい画像)
  • mask.png(マスク画像)
#cording:utf-8
import cv2

# 画像の読み込み
img = cv2.imread("img.png")

# マスクをグレースケールで読み込む(第二引数を0)
mask = cv2.imread("mask.png", 0)

# BGRにチャンネル分解
bgr = cv2.split(img)

# 透明チャンネル(マスク)を追加
bgra = cv2.merge(bgr + [mask])
cv2.imwrite("new.png", bgra)

解説

#BGRにチャンネル分解
bgr = cv2.split(img)

変数bgr[b_channel, r_channel, g_channel]という
各カラーチャンネルを成分に持つリストです。

b_channelは2次元のリストで
各成分b_channel[x][y]は、img[x][y]の青の値です。

#透明チャンネル(マスク)を追加
bgra = cv2.merge(bgr + [mask])

bgra[b_channel, r_channel, g_channel, alpha_channel]です。
alpha_channelは画像を透過させるパラメータです。

alpha_channelにマスク画像の値が
入るのでマスク画像の黒い部分が透過されます。

関連記事

https://www.tech-tech.xyz/clip_alpha_image