Можно так например. Учитывая указанный цвет зеленого, заменяем его по всему гринскрину на прозрачный, затем подмешиваем второе изображение с учетом этой маски.
Возможно есть более эффективные способы, но так тоже работает.
from PIL import Image
# заменяет указанный цвет на прозрачный
def make_transparent(image, color):
new = []
for item in image.getdata():
if item[:3] == color:
new.append((255, 255, 255, 0))
else:
new.append(item)
image.putdata(new)
GREEN = (x, y, z) # указываем цвет нашего зеленого на "гринскрине"
img_filename = "images/image.png"
screen_filename = "images/green.png"
img = Image.open(img_filename).convert('RGBA')
screen = Image.open(screen_filename).convert('RGBA')
make_transparent(screen, GREEN)
new = Image.alpha_composite(img, screen)
new.save('new_image.png')
Другой вариант - аналогично перебирать оба изображения и использовать пиксели первого/второго в зависимости от цвета пикселя гринскрина.