Наложение двух одинаковых изображений на Python

У меня есть два изображения, которые являются точно такими же размерами, все, что я пытаюсь сделать, это взять его, сделать его прозрачным на 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% прозрачное наложение (так на полпути!).

Попробуйте использовать blend () вместо paste () – кажется, что 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") 

Предоставьте параметр альфа-маски overlay и посмотрите, дает ли это результаты, которые вы ожидали:

 background.paste(overlay, overlay.size, overlay) 

Может быть, слишком старый вопрос, можно сделать с легкостью, используя opencv

 cv2.addWeighted(img1, alpha, img2, beta, gamma) #setting alpha=1, beta=1, gamma=0 gives direct overlay of two images 

Ссылка на документацию