'replace mask with original image opencv Python
I am trying to replace objects which I found using a mask with the original images pixels. I have a mask that shows black where the object is not detected and white if detected. I am then using the image in a where statement
image[np.where((image2 == [255,255,255].any(axis = 2))
I am stuck here and I have no idea how to change found white values to what the original image is (to use alongside other masks). I have tried image.shape and this did not work.
Thanks.
Solution 1:[1]
You can use bitwise operations. Try this:
replaced_image = cv2.bitwise_and(original_image,original_image,mask = your_mask)
Visit https://docs.opencv.org/3.3.0/d0/d86/tutorial_py_image_arithmetics.html
to learn more about bitwise operations
Solution 2:[2]
import os
import cv2
from netpbmfile import imread
img_dir = '.'
mask_dir = '.'
new_bg = 'image.png'
def get_foreground(fg_image_name, mask_name, bg_image_name):
fg_image = cv2.imread(fg_image_name)
mask = imread(mask_name)
mask_inverse = (1-mask)
bg_image = cv2.imread(bg_image_name)
bg_image = cv2.resize(bg_image, (fg_image.shape[1], fg_image.shape[0]))
foregound = cv2.bitwise_and(fg_image, fg_image, mask=mask)
background = cv2.bitwise_and(bg_image, bg_image, mask=mask_inverse)
composite = foregound + background
return composite
image_fg = get_foreground(os.path.join(img_dir, "NP1_0.jpg"), os.path.join(mask_dir, "NP1_0_mask.pbm"), new_bg)
cv2.imwrite("foreground.jpg", image_fg)
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | janu777 |
| Solution 2 | Anjana Wijesinghe |
