Чтобы продемонстрировать, что вы хотите, я проверил это. Сначала я создаю некоторую функцию для создания изображений аналогичного размера из входных данных.
import cv2
import numpy as np
def resize(img, dim=(300, 300)):
# perform the actual resizing of the image and show it
frame = cv2.resize(img, dim, interpolation=cv2.INTER_AREA)
return frame
Затем прочитайте и измените размеры изображений отдельно
img1 = resize(cv2.imread('img1.png'))
img2 = resize(cv2.imread('img2.png'))
dst = cv2.addWeighted(img1,0.7,img2,0.3,0)
Функция cv2.addWeighted
поможет мне достичь результата.
тогда вы можете сделать как вам нужно с выводом
cv2.imwrite('out.png', dst)
Так что применение этого же принципа к вашему коду было бы чем-то вроде. Я вижу, что у вас есть изображения такого же размера.
fn = "images/beard.jpg"
im = cv2.cvtColor(cv2.imread(fn), cv2.COLOR_BGR2RGB)
im = auto_downscaling(im)
# vgg_preprocess: output BGR channel w/ mean substracted.
inp_im = vgg_preprocess(im)
# Predicting the face segmentation
out = model.predict([inp_im])
out_resized = cv2.resize(np.squeeze(out), (im.shape[1],im.shape[0]))
out_resized_clipped = np.clip(out_resized.argmax(axis=2), 0, 1).astype(np.float64)
out_resized_clipped = cv2.GaussianBlur(out_resized_clipped, (7,7), 6)
mask = cv2.addWeighted(out_resized, 0.7, out_resized_clipped,0.3,0)
mask = cv2.GaussianBlur(out_resized_clipped, (7,7), 6)
plt.figure(figsize=(12,6))
plt.subplot("131")
plt.axis('off')
plt.imshow(im)
plt.subplot("132")
plt.axis('off')
plt.imshow(out_resized_clipped, cmap='gray')
plt.subplot("133")
plt.axis('off')
plt.imshow((mask[:,:,np.newaxis]*im.astype(np.float64)).astype(np.uint8))