I am trying to add a shadow effect dynamically to images with alpha channels.
Consider this image for example,
Right now, what I am trying to do is, separate the mask and the rgb channels. Then add a blur effect to the mask and adding the images back together using cv2.addWeighted
However, for that to work, I would need to add an offset to the mask before adding the images together. I am not sure how to do that.
My current code is following:
import cv2 import numpy as np filename = "removed.png" img = cv2.imread(filename, cv2.IMREAD_UNCHANGED) alpha_channel = np.invert(img[:,:,3]) rgb_channels = img[:,:,:3] cv2.imwrite("colorImg.jpeg", rgb_channels) cv2.imwrite("invertedMask.jpeg", alpha_channel) colorImg = cv2.imread("./colorImg.jpeg") maskImg = cv2.imread("./invertedMask.jpeg") maskImg = cv2.blur(maskImg, (10, 10)) # Add offset here somehow masked = cv2.addWeighted(colorImg, 0.8, maskImg, 0.4, 0) print(masked) cv2.imshow("masked", masked) cv2.waitKey() cv2.destroyAllWindows()
I am pretty sure this approach is not that good, and I am open to suggestions for other approaches.