Я переименовал ваши изображения в соответствии со своим мышлением, поэтому я принял это как image.png
:
![enter image description here](https://i.stack.imgur.com/Rs7CQ.png)
и это mask.png
:
![enter image description here](https://i.stack.imgur.com/7psXP.png)
Тогда я сделал то, что, как я думаю, вы хотите, следующим образом.Я написал это довольно многословно, чтобы вы могли видеть все шаги по пути:
#!/usr/local/bin/python3
from PIL import Image
import numpy as np
# Open input images
image = Image.open("image.png")
mask = Image.open("mask.png")
# Get dimensions
h,w=image.size
# Resize mask to match image, taking care not to introduce new colours (Image.NEAREST)
mask = mask.resize((h,w), Image.NEAREST)
mask.save('mask_resized.png')
# Convert both images to numpy equivalents
npimage = np.array(image)
npmask = np.array(mask)
# Make image transparent where mask is not blue
# Blue pixels in mask seem to show up as RGB(163 204 255)
npimage[:,:,3] = np.where((npmask[:,:,0]<170) & (npmask[:,:,1]<210) & (npmask[:,:,2]>250),255,0).astype(np.uint8)
# Identify grey pixels in image, i.e. R=G=B, and make transparent also
RequalsG=np.where(npimage[:,:,0]==npimage[:,:,1],1,0)
RequalsB=np.where(npimage[:,:,0]==npimage[:,:,2],1,0)
grey=(RequalsG*RequalsB).astype(np.uint8)
npimage[:,:,3] *= 1-grey
# Convert numpy image to PIL image and save
PILrgba=Image.fromarray(npimage)
PILrgba.save("result.png")
И вот результат:
![enter image description here](https://i.stack.imgur.com/VyMxj.png)
Примечания:
a) На вашем изображении уже есть (неиспользованный) альфа-канал.
b) Любые строки начинаются с:
npimage[:,:,3] = ...
просто изменяют 4-й канал, то есть канал альфа / прозрачности изображения