gpt4 book ai didi

python - 如何使用OpenCV将图像的一部分复制到另一个?

转载 作者:行者123 更新时间:2023-12-02 17:36:55 25 4
gpt4 key购买 nike

我有一个预测人脸分割的模型。

但是不幸的是,该模型没有经过训练来预测面部的头发。所以现在我将以上图像作为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()

最佳答案

为了演示您想要什么,我对此进行了测试。首先,我创建一些函数来根据输入创建相似大小的图像。

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))

关于python - 如何使用OpenCV将图像的一部分复制到另一个?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50232744/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com