我通常使用 numpy/scipy 来完成图像处理任务,尽管我的第一次体验(很好)是使用 PIL。因此,我不确定以下内容是否能满足您的需求。
给定一个特定的 pixel1,alpha1 来自 image1,pixel2 和 alpha2,来自 image2,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
使用上述定义,我们基本上将计算贡献
每个像素的第一张图像,然后在应用其 alpha 贴图后将其添加到第二张图像
我们也可以直接从 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()