我有两个尺寸完全相同的图像,我要做的就是拿一个,使它透明50%并将其直接放在另一个上面,如下所示:
import Image
background = Image.open("bg.png")
overlay = Image.open("over.png")
background = background.convert("RGBA")
overlay = overlay.convert("RGBA")
background_pixels = background.load()
overlay_pixels = overlay.load()
for y in xrange(overlay.size[1]):
for x in xrange(overlay.size[0]):
background_pixels[x,y] = (background_pixels[x,y][0], background_pixels[x,y][1], background_pixels[x,y][2], 255)
for y in xrange(overlay.size[1]):
for x in xrange(overlay.size[0]):
overlay_pixels[x,y] = (overlay_pixels[x,y][0], overlay_pixels[x,y][1], overlay_pixels[x,y][2], 128)
background.paste(overlay)
background.save("new.png","PNG")
但我得到的只是50%的透明覆盖图(所以在那里的一半!)。
答案 0 :(得分:13)
尝试使用blend()代替粘贴() - 似乎paste()只是将原始图片替换为您要粘贴的内容。
import Image
background = Image.open("bg.png")
overlay = Image.open("ol.jpg")
background = background.convert("RGBA")
overlay = overlay.convert("RGBA")
new_img = Image.blend(background, overlay, 0.5)
new_img.save("new.png","PNG")
答案 1 :(得分:5)
也许过于陈旧的问题,可以使用opencv
cv2.addWeighted(img1, alpha, img2, beta, gamma)
#setting alpha=1, beta=1, gamma=0 gives direct overlay of two images
答案 2 :(得分:0)
提供叠加alpha蒙版参数,看看是否会产生预期结果:
background.paste(overlay, overlay.size, overlay)
答案 3 :(得分:0)
脚本here还将使用blend来完成任务,它还具有调整图像大小的功能,以使图像大小与当前图像大小相同。
答案 4 :(得分:0)
如果您想将它们调整为相同的形状:
b_h, b_w, b_ch = background.shape
W = 800
imgScale = W/b_w
new_b_h,new_b_w = int(b_h*imgScale), int(b_w*imgScale)
new_background = cv2.resize(background,(new_b_w, new_b_h))
然后,您可以填写适合背景和前景的形状。
square= np.zeros((new_b_h, new_b_w, b_ch), np.uint8)
square.fill(255)
x= new_b_w
y= new_b_h
offset =0
square[int(y - new_b_h) - offset:int(y)- offset, int(x-new_b_w)- offset:int(x)- offset] = new_background
现在您可以覆盖:
OPACITY = 0.7
added_image = cv2.addWeighted(new_background,OPACITY,square, 1-OPACITY, 0)
详细信息在github