在保持不透明度的情况下混合图像
我一直在尝试把两张图片合成一张使用PIL库的图像。不过,为了让这两张图片能够很好地融合,我把透明度设置成了0.5。这样做的结果就是图片变得半透明,失去了原本的清晰度。有没有什么办法可以在不降低透明度的情况下合成这两张图片呢?
代码如下:
import Image
a = Image.open("image1.png")
b = Image.open("image2.png")
c = Image.blend(a,b,0.5)
c.save("abc.png", "PNG")
这是两张图片:(我是新用户,不能发布图片或超过两个链接,所以我只能放链接。)
1 个回答
0
这里有一个简单粗暴的版本,可以进一步改进。
from PIL import Image
from PIL import ImageChops
from PIL import ImageOps
import numpy as np
a = Image.open("a.png")
b = Image.open("b.png")
# Finds the difference between the two images. Then inverts so differences are black.
diff = ImageOps.invert(ImageChops.difference(a, b))
# Then we use numpy to convert black to red.
image = diff.convert('RGBA')
data = np.array(image)
r1,g1,b1 = 0,0,0
r2,g2,b2 = 255,0,0
red, green, blue = data[:,:,0], data[:,:,1], data[:,:,2]
mask = (red == r1) & (green == g1) & (blue == b1)
data[:,:,:3][mask] = [r2, g2, b2]
# Then we convert the array back to an image.
overlay = Image.fromarray(data)
# And blend with the original.
imgblend = ImageChops.add(a.convert('RGBA'), overlay,2)
imgblend.show()