Я пытаюсь создать 8-битную 1-канальную маску, используемую для некоторых операций с изображениями.У меня есть изображение, в котором некоторые пиксели заполнены fuscia (255, 0, 255
) на изображении original
, что указывает на то, что пиксель следует использовать в маскировании.
Моя идея состоит в том, чтобы просто скопировать исходное изображение, а затем заменитьвсе пиксели fuscia с белым, и все пиксели не-fuscia с черным.Я использую numpy.place
для этого.Однако, похоже, что он действительно «применяет» только последнюю place
операцию.
Например, в приведенном ниже коде я пытаюсь сначала установить для всех пикселей fuscia белый, а затем для всех-фуция пикселей на черный.Тем не менее, когда я иду и сохраняю изображение и смотрю на него, только пиксели не-fuscia стали черными.
mask = original.copy()
np.place(mask, mask == (255, 0, 255), (255, 255, 255))
np.place(mask, mask != (255, 0, 255), (0, 0, 0))
mask = mask.reshape((h, w, 3))
mask = cv2.cvtColor(mask, cv2.COLOR_RGB2GRAY)
original
mask
Я ожидаю, что область fuscia будет белой, но это не так.Это полутоновая версия цвета fuscia (112, 112, 112
)
Я довольно новичок в numpy, так что, возможно, я даже лаю не на том дереве, и может быть более простой способ сделать это.Что я делаю неправильно?Есть ли более простой способ сделать то, что я описываю?Спасибо!