# 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
にマスク画像の値が 入るのでマスク画像の黒い部分が透過されます。
コメント