замаскировать изображение в питоне - PullRequest
0 голосов
/ 08 октября 2019

У меня есть двоичная маска и изображение того же размера. Я хочу замаскировать человека. Я использовал np.multiply, но он дает изображение, как показано ниже, но я хочу человека, а не белые пиксели !: Я нанес маску и изображение. они нормальные, но их умножение не так, как я ожидаю.

enter image description here

import cv2
import os
import numpy as np
masks32x32 = "./DATA/resized_masks/"
images500x500 = "./DATA/resized_imgs/"

masks = os.listdir(masks32x32)
images = os.listdir(images500x500)

for inx, img in enumerate(images):
    img_array = cv2.imread(images500x500+img)
    mask_array = cv2.imread(masks32x32+img)
    mask120x120 = cv2.resize(mask_array,(500,500),interpolation=cv2.INTER_AREA)
    mask120x120 = np.divide(mask120x120, 255)

    masked_image=np.multiply(img_array, mask120x120)
    cv2.imshow("image",masked_image)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

1 Ответ

0 голосов
/ 08 октября 2019

Благодаря Абитболу. Я решил проблему, используя эту ссылку: ссылка

Я опубликую это здесь. Может быть, это помогает им. Я исправил код, как показано ниже. Теперь работает нормально.

import cv2
import os
import numpy as np
masks32x32 = "./DATA/resized_masks/"
images500x500 = "./DATA/resized_imgs/"

masks = os.listdir(masks32x32)
images = os.listdir(images500x500)

for inx, img in enumerate(images):
    img_array = cv2.imread(images500x500+img)
    mask_array = cv2.imread(masks32x32+img)
    mask500x500 = cv2.resize(mask_array,(500,500),interpolation=cv2.INTER_AREA)
    print(mask500x500.shape)
    print(img_array.shape)

    mask500x500 = cv2.cvtColor(mask500x500, cv2.COLOR_BGR2GRAY)
    #mask500x500 = np.divide(mask500x500, 255)
    mask500x500 = mask500x500.astype(np.uint8)
    masked_image=cv2.bitwise_and(img_array, img_array, mask=mask500x500)
    #masked_image=np.multiply(img_array, mask120x120)
    cv2.imshow("image",masked_image)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
...