Давайте разделим ваше изображение на две составные части: первую image.png
:
и вторую mask.png
:
Теперь вы можете просто использовать ImageMagick в Терминале без написания кода. У вас есть пара вариантов. Вы можете либо:
- сделать черные части маски прозрачными в результате, либо
- сделать черные части маски черными в результате.
Давайте сначала сделаем их прозрачными, поэтому мы эффективно копируем маску в изображение и обрабатываем ее как слой альфа / прозрачности:
magick image.png mask.png -compose copyalpha -composite result.png
А теперь давайте сделаем их черными, выбрав более темное изображение оригинала и маску в каждой точке пикселя - отсюда режим смешивания darken
:
magick image.png mask.png -compose darken -composite result.png
Обратите внимание, что если вы используете первый метод, исходная информация, которая выглядит прозрачной, все еще находится на изображении и может быть получена - поэтому не используйте этот метод, чтобы скрыть конфиденциальную информацию.
Если вы хотите использовать метод прозрачности из Python с PIL, вы можете сделать:
from PIL import Image
# Read image and mask as PIL Images
im = Image.open('image.png').convert('RGB')
ma = Image.open('mask.png').convert('L')
# Merge in mask as alpha channel and save
im.putalpha(ma)
im.save('result.png')
Или метод прозрачности с OpenCV и Numpy :
import cv2
import numpy as np
# Open image and mask as NMumoy arrays
im = cv2.imread('image.png')
ma = cv2.imread('mask.png', cv2.IMREAD_GRAYSCALE)
# Merge mask in as alpha channel and save
res = np.dstack((im,ma))
cv2.imwrite('result.png', res)
Если вы хотите использовать б Метод Lainen с Python и PIL / Pillow, используйте:
from PIL import Image, ImageChops
# Read image and mask as PIL Images
im = Image.open('image.png').convert('RGB')
ma = Image.open('mask.png').convert('RGB')
# Choose darker image at each pixel location and save
res = ImageChops.darker(im, ma)
res.save('result.png')
Если вы хотите использовать метод Blacken с OpenCV и Numpy, используйте код выше но замените строку np.dstack()
на:
res = np.minimum(im, ma[...,np.newaxis])