I have below image and I want to overlay a black patch on the right most side of the image. So I am resizing the both the images to specific size in below code and get only the non white part of overlay and paste it over the specific x,y coordinates but not getting the expected results. I looked into cv2.addWeighted but I dont find any option to specify the option use coordinates of where to paste the overlay.
Can someone guide on how to achieve it in cv2?
vr_overlay = "/Users/templates/vertical_overlay.png"
show_image = "/Users/templates/image_3.png"
vr_overlay_co = (0, 0, 100, 412)
img_size = (0, 0, 440, 412)
img = cv2.imread(show_image)
img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
v_overlay = cv2.imread(vr_overlay)
resize_v_overlay = cv2.resize(v_overlay, (vr_overlay_co[2], vr_overlay_co[3]))
plt.imshow(resize_v_overlay ,cmap='gray')
plt.axis('off')
plt.show()
resize_img = cv2.resize(img_rgb, (img_size[2], img_size[3]))
plt.imshow(resize_img ,cmap='gray')
plt.axis('off')
plt.show()
resize_img[vr_overlay_co[1]: vr_overlay_co[1] +
vr_overlay_co[3],vr_overlay_co[0]: vr_overlay_co[0] +
vr_overlay_co[2]] = np.where(resize_v_overlay != [0, 0, 0],
resize_img[vr_overlay_co[1]: vr_overlay_co[1]
+ vr_overlay_co[3], vr_overlay_co[0]:
vr_overlay_co[0] + vr_overlay_co[2],], resize_v_overlay)
plt.imshow(resize_img ,cmap='gray')
plt.axis('off')
plt.show()
Expected result:



Here is one way to do that in Python/OpenCV.
(I note that the images you posted are not sizes you say, especially the gradient. So extra processing is needed to match the sizes of the images. Also the gradient image has a white border that I doubt you want.)
Input:
Gradient (with white borders):