blend_modes icon indicating copy to clipboard operation
blend_modes copied to clipboard

multiply : The function however expects a 4-layer

Open B14ckP4nd4 opened this issue 2 years ago • 1 comments

I tried to use multiply effect and I got this error

TypeError: The blend_modes function "multiply" received a numpy array with 3 layers for its argument "img_in". The function however expects a 4-layer array representing red, green, blue, and alpha channel for this argument. Please supply a numpy array that includes all 4 layers to the "img_in" argument.

here is my code :

# Import background image
background_img_float = cv2.imread('bg.jpg', -1).astype(float)

# Import foreground image
foreground_img_float = cv2.imread('personal.jpg', -1).astype(float)


# Blend images
opacity = 0.7  # The opacity of the foreground that is blended onto the background is 70 %.
blended_img_float = multiply(background_img_float, foreground_img_float, opacity)

# Display blended image
blended_img_uint8 = blended_img_float.astype(np.uint8)  # Convert image to OpenCV native display format
cv2.imshow('window', blended_img_uint8)
cv2.waitKey()  # Press a key to close window with the image.

B14ckP4nd4 avatar Mar 25 '23 13:03 B14ckP4nd4

This was my solution:

def add_alpha_channel(image):
    height, width = image.shape[:2]
    # Create an alpha channel with full opacity for every pixel
    alpha_channel = np.ones((height, width, 1), dtype=image.dtype) * 255
    return np.concatenate((image, alpha_channel), axis=-1)
    
background_img_float = add_alpha_channel(cv2.imread('bg.jpg', -1).astype(float))

Eunoia avatar Feb 23 '24 15:02 Eunoia