Вы можете реализовать это, подписав color_mapping
:
pixel_result = color_mapping[<b>img[:,:,0], img[:,:,1], img[:,:,2]</b>]
Например, если проверить производительность с помощью:
>>> def f():
... for i in range(width):
... for j in range(height):
... pixel_result[j,i] = color_mapping[img[j,i,0],img[j,i,1],img[j,i,2]]
...
>>> def g():
... pixel_result = color_mapping[img[:,:,0], img[:,:,1], img[:,:,2]]
>>> color_mapping = np.random.randn(256,256,256)
Затем для небольшого изображения: img = np.random.randint(0, 256, (12, 7, 3))
, мы получаем:
>>> timeit(f, number=10000)
0.5247259399620816
>>> timeit(g, number=10000)
0.032307324931025505
Для больших изображений, таких как img = np.random.randint(0, 256, (1920, 1080, 3))
, получаем:
>>> timeit(f, number=10)
18.934733690926805
>>> timeit(g, number=10)
0.5807857210747898
или для изображений 72 × 128:
>>> timeit(f, number=100)
0.6014469779329374
>>> timeit(g, number=100)
0.011570235947147012