私の最初の経験 (良い経験) は PIL でした。そのため、以下があなたのニーズを満たすかどうかはわかりません.
image1 からの alpha1 を持つ特定の pixel1 と、image2 からの alpha2 を持つ特定の pixel2 が与えられると、outputPixel は次のようになります。
alpha1>=alpha2 then outputPixel = (alpha1-alpha2)*pixel1 + alpha2*pixel2
alpha1==alpha2 then outputPixel = 0*pixel1 + alpha2*pixel2 note in this case alpha1-alpha2 equals 0
alpha1<alpha2 then outputPixel = 0*pixel1 + alpha2*pixel2
上記の定義を使用して、基本的に各ピクセルの最初の画像からの寄与を計算し、アルファ マップを適用した後にこれを 2 番目の画像に追加します。
これは imshow から直接取得することもできます
r1 = scipy.misc.imread('red.png')
b1 = scipy.misc.imread('blue.png')
r1 = r1.astype(numpy.float32)
b1 = b1.astype(numpy.float32)
alpha1 = r1[:,:,3]
alpha2 = b1[:,:,3]
#scale the alpha mattes to keep resulting alpha'd images in display range
alpha1Scaled = alpha1 / 255
alpha2Scaled = alpha2 / 255
diff1 = alpha1Scaled - alpha2Scaled
i1 = r1[:,:,0:3]
i2 = b1[:,:,0:3]
#create the alpha mapped images
d1 = numpy.zeros(i1.shape)
d2 = numpy.zeros(i2.shape)
for z in range(3):
d1[:,:,z] =(diff1>=0)*diff1*i1[:,:,z]
d2[:,:,z] = i2[:,:,z]*alpha2Scaled
#belend the result
result = d1 + d2
#rescale in case of overflow
resultScaled = 255*(result/result.max())
#to display
imshow(( resultScaled ).astype(uint8))
show()
#note the below gives us the same result
figure()
imshow(red)
imshow(blue)
show()