Я предполагаю, что ваше входное изображение не имеет прозрачного фона по умолчанию.Функция convert_to_png()
добавит альфа-канал к вашему изображению
def convert_to_png(img):
fin_img = cv2.cvtColor(img, cv2.COLOR_RGB2RGBA)
b, g, r, alpha = cv2.split(fin_img)
alpha[:, :] = 0.0
# plt.imshow(alpha);plt.title('alpha image');plt.show()
# plt.imshow(img);plt.title('original image');plt.show()
alpha[np.where((img != (255, 255, 255)).any(axis = 2))] = 255
fin_img[:,:, 0] = img[:,:,0]
fin_img[:,:, 1] = img[:,:,1]
fin_img[:,:, 2] = img[:,:,2]
fin_img[:,:, 3] = alpha[:,:]
# plt.imshow(fin_img);plt.title('fin image');plt.show()
return fin_img
Как только вы получите изображение с альфа-каналом, вы можете вставить изображение друг на друга следующим образом:
y1, y2 = new_loc[1], new_loc[1] + img.shape[0]
x1, x2 = new_loc[0], new_loc[0] + img.shape[1]
alpha_s = img[:, :, 3] / 255.0
alpha_l = 1.0 - alpha_s
for c in range(0, 3):
fin_img[y1:y2, x1:x2, c] = (alpha_s * img[:, :, c] +
alpha_l * img[y1:y2, x1:x2, c])
Здесь fin_img
- 3-канальное выходное изображение