I would like to crop my original image using the binary mask for which I have written code
import cv2
import numpy as np
import matplotlib as plt
img = cv2.imread("image.png")
mask = cv2.imread("mask.png")
h, w, _ = img.shape
mask = cv2.resize(cv2.cvtColor(mask, cv2.COLOR_BGR2GRAY), (w, h)) # Resize image
bg = np.zeros_like(img, 'uint8') # Black background
def crop(img, bg, mask):
fg = cv2.bitwise_or(img, img, mask=mask)
fg_back_inv = cv2.bitwise_or(bg, bg, mask=cv2.bitwise_not(mask))
New_image = cv2.bitwise_or(fg, fg_back_inv)
return New_image
plt.imshow(cv2.cvtColor(New_image, cv2.COLOR_BGR2RGB))
I am getting an error which states
NameError: name 'New_image' is not defined
Kindly suggest me where i am making a mistake here
You have only created the function crop, but you haven't called it. You will have to create the variable and assign the value you get from the function, and only then use it for the plot.
def crop(img, bg, mask):
fg = cv2.bitwise_or(img, img, mask=mask)
fg_back_inv = cv2.bitwise_or(bg, bg, mask=cv2.bitwise_not(mask))
New_image = cv2.bitwise_or(fg, fg_back_inv)
return New_image
New_image = crop(img, bg, mask)
plt.imshow(cv2.cvtColor(New_image, cv2.COLOR_BGR2RGB))