Неправильные цвета при использовании cv2.bitwise - PullRequest
0 голосов
/ 07 апреля 2020

У меня проблемы с использованием cv2.bitwise, как видно в конце, я получил розовое изображение, в то время как я ожидаю зеленого цвета. Но я не могу понять, почему.

import cv2
import numpy as np

img = cv2.imread("image.png")[...,::-1]
shape = img.shape # 512,512,3

label = cv2.imread("mask.png", cv2.COLOR_BGR2GRAY)
shape = label.shape # 512,512

black_background = np.zeros(shape=shape, dtype=np.uint8)
shape = black_background.shape # 512,512

result = cv2.bitwise_not(img,black_background,mask=label)
cv2.imwrite("masked.png",result)

enter image description here enter image description here enter image description here

Спасибо за помощь в будущем!

1 Ответ

1 голос
/ 07 апреля 2020

Это потому, что вы НЕ делаете или инвертируете каждый бит ввода img, поэтому цвет не соответствует ожидаемому. Вы можете решить эту проблему, ОТПРАВЛЯЯ один раз вход img, чтобы вторая операция вернула его в ожидаемый цвет, например так:

img2 = img.copy()
cv2.bitwise_not(img, img2)
result = cv2.bitwise_not(img2, black_background, mask=label)
cv2.imwrite("masked.png",result)

Редактировать : В качестве альтернативы вы можете просто добавьте img к черному изображению соответствующей формы, чтобы цвета никогда не смешивались, например:

black = np.zeros(shape=img.shape, dtype=np.uint8)
result = cv2.add(img, black, black_background, mask=label)
cv2.imwrite("masked2.png", result)
...