いろいろ備忘録

雑記です。

OpenCVで画像の透明なピクセルの割合を調べる

完全に透明の部分しか渡せません。

Python 2.7.10

 

# -*- coding:utf-8 -*-
import cv2

#アルファチャネルを読み込むためにcv2.IMREAD_UNCHANGEDを渡す
image = cv2.imread('exa.png',cv2.IMREAD_UNCHANGED)
#countNonZeroは1チャネルの画像しか渡せないので、アルファチャネルのみ取り出す
transparentArray = cv2.split(image)[3]
# == transparentArray = image[:,:,3]
imageLen = image.shape[0] * image.shape[1]
#透明はアルファチャンネルが0の部分
alphaLen = imageLen - cv2.countNonZero(transparentArray)

print float(alphaLen) / imageLen

 

今回は必要でないので試していませんが、アルファチャネルが10以下など、完全に透明でない場合は

np.where(np.logical_and(a<=10))

のようにするかもしれません。