Вы можете использовать широковещательную трансляцию:
Пример:
>>> pprint(labels)
{'BG': array([255, 0, 0]),
'eyes': array([ 0, 0, 255]),
'face': array([255, 255, 0]),
'hair': array([127, 0, 0]),
'mouth': array([ 0, 255, 0]),
'nose': array([ 0, 255, 255])}
>>> example
array([[[255, 0, 0],
[127, 0, 0],
[255, 0, 0],
[255, 0, 0]],
[[255, 255, 0],
[ 0, 255, 0],
[255, 0, 0],
[ 0, 255, 0]],
[[ 0, 0, 255],
[255, 255, 0],
[ 0, 0, 255],
[ 0, 0, 255]]])
При использовании трансляции можно одновременно проверить три канала.Затем, используя all
вдоль оси 2, мы можем выбрать точки, которые удовлетворяют всем трем равенствам.
>>> masks = {k: (example==v).all(2) for k, v in labels.items()}
Вот и все.Результат:
>>> pprint(masks)
{'BG': array([[ True, False, True, True],
[False, False, True, False],
[False, False, False, False]]),
'eyes': array([[False, False, False, False],
[False, False, False, False],
[ True, False, True, True]]),
'face': array([[False, False, False, False],
[ True, False, False, False],
[False, True, False, False]]),
'hair': array([[False, True, False, False],
[False, False, False, False],
[False, False, False, False]]),
'mouth': array([[False, False, False, False],
[False, True, False, True],
[False, False, False, False]]),
'nose': array([[False, False, False, False],
[False, False, False, False],
[False, False, False, False]])}