简体   繁体   中英

How to mask out the object from the image?

I have a RGB image of 256X256 with the binary mask. I want to remove the object from the main image with the help of mask and keep the rest background.

I have tried with the below code but it didn't work.

Can anyone let me know where I made the mistake?

import cv2
import numpy as np

# read image
img = cv2.imread('image.jpg')

mask2 = cv2.imread('mask.jpg') / 1
# mask by multiplication, clip to range 0 to 255 and make integer
result2 = (img * mask2).clip(0, 255).astype(np.uint8)



# save results
cv2.imwrite('result.png', result1)

Image, Mask:

图片 面具

Output I want, The result I am getting:

输出 我的结果

You need to use cv2.bitwise_and for your problem. It performs 'AND' operation between your img and mask in a bitwise manner.

  • For white region in the mask , corresponding img region is preserved
  • For white region in the mask , corresponding img region is occluded

Code:

img = cv2.imread(r'C:\Users\524316\Desktop\Stack\eye\eye.jpg')
mask = cv2.imread(r'C:\Users\524316\Desktop\Stack\eye\mask.jpg', 0)

# invert the mask
th = cv2.threshold(mask,0,255,cv2.THRESH_BINARY_INV+cv2.THRESH_OTSU)[1]

# preserve the background
res = cv2.bitwise_and(img, img, mask = th)

Result:

在此处输入图像描述

You don't need Otsu thresholding, just ordinary thresholding, with a sensible threshold. Your "mask" image is a JPEG. Lossy compression causes it to not be entirely black or white.

Once you have the mask, you just need to learn about masking operations. That is a feature of numpy I'm using here:

im = cv.imread("VgAjK.jpg")
maskim = cv.imread("ZKKkp.jpg", cv.IMREAD_GRAYSCALE)

im[maskim >= 128] = 255 # "remove", paint over with white

输出

You multiplied... that might have worked (except inverted) if your arrays had the right value ranges.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM