我有一个预测人脸分割的模型。
但不幸的是,该模型没有经过训练来预测脸部的头发。所以现在我将上面的图像作为numpy数组。是否可以将原始照片(左边的那个)的头发添加到预测蒙版(中间)或者直接添加到结果预测(右边的那个)?
基本上我只需要处理原始图像,从预测蒙版上方的头部稍微加一点,然后将其添加到预测中,这样至少我会在结果中有一部分头发
用于创建上图的代码:
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)
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))
plt.show()
答案 0 :(得分:1)
为了展示你想要的东西我测试了这个。首先,我创建了一些函数来从输入创建类似大小的图像。
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))