Вот простой, родной способ PIL сделать это путем умножения на преобразование.Я установил преобразование по умолчанию, чтобы математика выглядела следующим образом:
newRed = 1*oldRed + 0*oldGreen + 0*oldBlue + constant
newGreen = 0*oldRed + 1*OldGreen + 0*OldBlue + constant
newBlue = 0*oldRed + 0*OldGreen + 1*OldBlue + constant
Затем я просто изменяю 1
на 0
, где я хочу обнулить канал.
#!/usr/bin/env python3
from PIL import Image
# Open image
im = Image.open('input.png').convert("RGB")
# Pre-set R, G and B multipliers to 1
Rmult, Gmult, Bmult = 1, 1, 1
# Select one (or more) channels to zero out, I choose B channel here
Bmult=0
# Make transform matrix
Matrix = ( Rmult, 0, 0, 0,
0, Gmult, 0, 0,
0, 0, Bmult, 0)
# Apply transform and save
im = im.convert("RGB", Matrix)
im.save('result.png')
Итак, если вы начнете с этого:
и вы установите нулевой множитель Blue (Bmult
), вы получите:
Если вы обнулите Красный и Синий с помощью:
Rmult = Bmult = 0
, вы получите: