Невозможно добавить маску к изображению, используя cv2 и numpy - PullRequest
0 голосов
/ 30 апреля 2020

Это оригинальное изображение:

plt.imshow(new_image)

enter image description here

Этот массив был сгенерирован моделью сегментации c semanti:

print(image_mask)

array([[2, 2, 2, ..., 7, 7, 7],
       [2, 2, 2, ..., 7, 7, 7],
       [2, 2, 2, ..., 7, 7, 7],
       ...,
       [0, 0, 0, ..., 0, 0, 0],
       [0, 0, 0, ..., 0, 0, 0],
       [0, 0, 0, ..., 0, 0, 0]])

Когда изображение отображается в виде изображения с помощью matplotlib, оно добавляет ложные цвета и создает изображение:

plt.imshow(image_mask)

enter image description here

Изменить это в изображение, которое я сделал:

image_mask_copy = image_mask.copy()
np.place(image_mask_copy,image_mask_copy!=15,[0]) # REMOVE ALL EXCEPT PEOPLE, == 0
np.place(image_mask_copy,image_mask_copy==15,[255]) # MAKE PEOPLE == 255
new_image_mask = np.expand_dims(image_mask_copy,-1)*np.ones((1,1,3))
plt.imshow(new_image_mask)

enter image description here

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

new_image = cv2.bitwise_and(image,image,new_image_mask)
plt.imshow(new_image)

enter image description here

И я получаю маску при попытке numpy ..:

image_mask_copy = image_mask.copy()
np.place(image_mask_copy,image_mask_copy!=15,[0])
np.place(image_mask_copy,image_mask_copy==15,[1]) #NOTICE 1 NOT 255

new_image = np.multiply(new_image_mask,image)
plt.imshow(new_image)

enter image description here

Я не могу понять, почему это происходит ... Пожалуйста, помогите

1 Ответ

0 голосов
/ 30 апреля 2020
bitwise_and takes 3 arguments. cv2.bitwise_and(src1, src2, mask)

и вычисляет побитовые_и src1 и src2 для каждого пикселя с маской! = 0.

https://docs.opencv.org/2.4/modules/core/doc/operations_on_arrays.html

попробуйте

new_image = cv2.bitwise_and(image,new_image_mask)
plt.imshow(new_image)

вместо

new_image = cv2.bitwise_and(image,image,new_image_mask)
plt.imshow(new_image)
...