您可以使用 pillow 和 putalpha 将灰度图像 (L) 添加到 RGB 图像作为 alpha 通道 - 因此它将具有透明背景。但两张图片的大小必须相同。
from PIL import Image
# load images
img_org = Image.open('temple.jpg')
img_mask = Image.open('heart.jpg')
# convert images
#img_org = img_org.convert('RGB') # or 'RGBA'
img_mask = img_mask.convert('L') # grayscale
# the same size
img_org = img_org.resize((400,400))
img_mask = img_mask.resize((400,400))
# add alpha channel
img_org.putalpha(img_mask)
# save as png which keeps alpha channel
img_org.save('output-pillow.png')
顺便说一句:
您可以使用pillow 中的其他功能仅调整蒙版的大小并保持心脏的原始比例。
黑色给全透明,白色保持原色,但你也可以灰色使像素半透明。
编辑:
cv2也一样
import cv2
# load images
img_org = cv2.imread('temple.jpg')
img_mask = cv2.imread('heart.jpg')
# convert colors
#img_org = cv2.cvtColor(img_org, ???)
img_mask = cv2.cvtColor(img_mask, cv2.COLOR_BGR2GRAY)
# the same size
img_org = cv2.resize(img_org, (400,400))
img_mask = cv2.resize(img_mask, (400,400))
# add alpha channel
b, g, r = cv2.split(img_org)
img_output = cv2.merge([b, g, r, img_mask], 4)
# write as png which keeps alpha channel
cv2.imwrite('output-cv2.png', img_output)
顺便说一句: cv2 使用 BGR 而不是 RGB