Как правильно установить бинарную маску в OpenCV python?

У меня есть изображение img. У меня также есть маска со значением 255 во всех местах, где я хочу сохранить значения пикселей img, равные 0 во всех других местах.

Я хочу использовать эти два изображения, а именно. маска и img так, что я создаю матрицу с исходными значениями img в местах, где маска равна 255, и значением -1 во всех местах, где маска равна 0.

Пока что я написал это:

maskedImg = cv2.bitwise_and(img, mask)

но у maskedImg есть 0 во всех местах, где маска имеет 0. Как я могу получить значение -1 вместо 0 во всех других местах, используя быструю побитовую операцию?


person London guy    schedule 17.12.2017    source источник
comment
поменяйте маску местами (побитово нет) и побитово или с изображением   -  person Mad Physicist    schedule 17.12.2017
comment
@MadPhysicist спасибо за комментарий. Если я поменяю местами маску и или маску с изображением, у меня будет значение 255 во всех местах за пределами маски. Я хочу значение -1 во всех других местах за пределами маски.   -  person London guy    schedule 18.12.2017
comment
не уверен, почему вы предпочитаете -1... но OpenCV обычно использует uint8 для большинства изображений, включая маски, поэтому, вероятно, вам нужно изменить тип frist.... чтобы он мог иметь -1   -  person api55    schedule 18.12.2017
comment
@Лондонгай. 255 является -1 во всех смыслах и целях.   -  person Mad Physicist    schedule 18.12.2017
comment
Кроме того, как указал @api55, вам нужно указать тип вашего изображения и сообщить нам, насколько далеко вы готовы зайти в конверсиях.   -  person Mad Physicist    schedule 18.12.2017


Ответы (1)


Я не знаю, что такое dtype вашего изображения. По умолчанию используется np.uint8, поэтому вы не можете установить -1 для результата, он уменьшается до -1 + 256 = 255. То есть, если dtype равен np.uint8, вы не можете установить для него отрицательное значение.

Если вы хотите установить значение -1, вы должны изменить dtype.

#masked = cv2.bitwise_and(img, mask).astype(np.int32)
masked = np.int32(img)
masked[mask==0] = -1
person Kinght 金    schedule 18.12.2017