2017-06-02 24 views
0

以下のプログラムでは、3チャンネル画像にアルファチャンネルを追加して不透明度を制御しています。しかし、私が与えるアルファチャンネルの価値に関係なく、画像には何の効果もありません!誰でも私に理由を説明できますか?PythonでOpencvを使用して画像の不透明度を下げる

import numpy as np 
import cv2 

image = cv2.imread('image.jpg') 
print image 

b_channel,g_channel,r_channel = cv2.split(image) 
a_channel = np.ones(b_channel.shape, dtype=b_channel.dtype)*10 
image = cv2.merge((b_channel,g_channel,r_channel,a_channel)) 

print image 
cv2.imshow('img',image) 
cv2.waitKey(0) 
cv2.destroyAllWindows() 

私はプログラムでそれを変更するとアルファチャンネルが追加され、その値が変更された端末で見ることができますが、画像自体の不透明度には影響がありません!

私はOpenCVを初めて使っているので、何か簡単なものがありません。手伝ってくれてありがとう!

答えて

2

アルファは、画像の不透明度を制御するために使用されるチャネルです。アルファチャンネルは、通常、アクションを実行しない限り、何もしません。画像を透明にすることはできません。

アルファは、通常、画像の重要でない領域を削除するか、ある画像を別の画像と結合するために使用されます。最初のケースでは、画像は通常そのアルファで単純に乗算されます。これは、時には事前に乗算することを意味します。この場合、アルファチャンネルの暗い部分はRGBを暗くし、明るい部分はRGBをそのままにします。ここで

R = R*A 
G = G*A 
B = B*A 

は(私は32ビットに変換するノート・それらは0から1の範囲であったされている場合、それはアルファチャンネルを使用する方が簡単だから)あなたが欲しいものを行う可能性がありますあなたのコードのバージョンです:

import numpy as np 
import cv2 

i = cv2.imread('image.jpg') 
img = np.array(i, dtype=np.float) 
img /= 255.0 
cv2.imshow('img',img) 
cv2.waitKey(0) 

#pre-multiplication 
a_channel = np.ones(img.shape, dtype=np.float)/2.0 
image = img*a_channel 

cv2.imshow('img',image) 
cv2.waitKey(0) 
cv2.destroyAllWindows() 

2番目のケースは、イメージを別のイメージにオーバーレイしようとするときに使用されます。これは、「オーバー」マージまたは「ブレンド」マージと呼ばれることが多い合成操作です。この場合、前景画像「A」と背景画像「B」とアルファチャンネルが存在し、これはRGB画像に含まれていてもよいし、それ自体であってもよい。この場合、AをBに置き換えることができます。

output = (A * alpha) + (B * (1-alpha)) 
+0

お返事ありがとうございました!私はあなたのコードを試して、それはちょうどうまくいった:) – Ank

関連する問題