Попробуйте использовать Image.blend()
.Предположим, ваше изображение im
.
# conversion matrix: any color to white, black to black
mtx = (1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0)
mask = im.convert("L", mtx) # show() it to get the idea
decal = Image.new("RGB", im.size, (0, 0, 255)) # we fill with blue
Image.blend(im, decal, mask).show() # all black turned blue
Это должно быть намного быстрее, чем лямбда-вызовы на пиксель, особенно на больших изображениях.