flrs / blend_modes

Python package that implements image blend modes
MIT License
140 stars 29 forks source link

multiply : The function however expects a 4-layer #26

Open B14ckP4nd4 opened 1 year ago

B14ckP4nd4 commented 1 year ago

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.
Eunoia commented 8 months ago

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))