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

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

[![透過画像](http://www.tech-tech.xyz/wp-content/uploads/2018/03/8731245c.jpg)](http://www.tech-tech.xyz/wp-content/uploads/2018/03/8731245c.jpg "透過画像") 元の画像を**マスク画像の黒い領域**で**透過**させる方法を紹介します。

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

- img.png(透過させたい画像)
- mask.png(マスク画像)

```python
#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
“`

コメント

タイトルとURLをコピーしました