import numpy as np
[docs]def blackwhite(clip, RGB=None, preserve_luminosity=True):
"""Desaturates the picture, makes it black and white.
Parameter RGB allows to set weights for the different color
channels.
If RBG is 'CRT_phosphor' a special set of values is used.
preserve_luminosity maintains the sum of RGB to 1.
"""
if RGB is None:
RGB = [1, 1, 1]
if RGB == "CRT_phosphor":
RGB = [0.2125, 0.7154, 0.0721]
R, G, B = 1.0 * np.array(RGB) / (sum(RGB) if preserve_luminosity else 1)
def filter(im):
im = R * im[:, :, 0] + G * im[:, :, 1] + B * im[:, :, 2]
return np.dstack(3 * [im]).astype("uint8")
return clip.image_transform(filter)