首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用蒙版将图像添加到一起

使用蒙版将图像添加到一起
EN

Stack Overflow用户
提问于 2021-07-27 20:29:37
回答 1查看 63关注 0票数 0

所以我现在有2张图片在下面。这些是使用神经风格转移网络在图像的前景和背景部分获得的。

使用的代码如下:

代码语言:javascript
复制
add = cv2.add(image1, image2)
cv2.imshow('Addition', add)
cv2.waitKey(0)
cv2.destroyAllWindows()

我将它们合并以创建以下结果图像:

但是,我想在获得的图片上使用显著遮罩。显著遮罩如下所示。我尝试过将掩码参数输入到add函数中,但没有成功。我试着看了这篇文章,但不知道该怎么做Add 2 images together based on a mask

编辑:

我发现问题出在我没有转换数据类型。更新后的代码是:

代码语言:javascript
复制
saliencyMap = cv2.resize(saliencyMap, (384,384))
newmap = saliencyMap.astype(np.uint8)
add = cv2.add(image1, image2, mask=newmap)
cv2.imshow('addition', add)
cv2.waitKey(0)

然而,产生的图像是,我不确定为什么:

EN

回答 1

Stack Overflow用户

发布于 2021-07-28 06:21:53

我认为你可能想要的是简单地调整两个图像的大小到相同的大小,然后将它们相加。然后使用遮罩在Python/OpenCV中进行强光合成。

img1:

img2:

掩码(显着性):

代码语言:javascript
复制
import cv2
import numpy as np

# read image 1
img1 = cv2.imread('img1.png')
hh, ww = img1.shape[:2]

# read image 2 and resize to same size as img1
img2 = cv2.imread('img2.png')
img2 = cv2.resize(img2, (ww,hh))

# read saliency mask as grayscale and resize to same size as img1
mask = cv2.imread('mask.png')
mask = cv2.cvtColor(mask, cv2.COLOR_BGR2GRAY)
mask = cv2.resize(mask, (ww,hh))

# add img1 and img2
img12 = cv2.add(img1, img2)

# get mean of mask and shift mean to mid-gray
# desirable for hard light compositing
# add bias as needed
mean = np.mean(mask)
bias = -32
shift = 128 - mean + bias
mask = cv2.add(mask, shift)
mask = cv2.merge([mask,mask,mask])

# threshold mask at mid gray and convert to 3 channels
# (needed to use as src < 0.5 "if" condition in hard light)
thresh = cv2.threshold(mask, 128, 255, cv2.THRESH_BINARY)[1]

# do hard light composite of img12 and mask
# see CSS specs at https://www.w3.org/TR/compositing-1/#blendinghardlight
img12f = img12.astype(np.uint8)/255
maskf =  mask.astype(np.uint8)/255
threshf =  thresh.astype(np.uint8)/255
threshf_inv = 1 - threshf
low = 2.0 * img12f * maskf
high = 1 - 2.0 * (1-img12f) * (1-maskf)
result = ( 255 * (low * threshf_inv + high * threshf) ).clip(0, 255).astype(np.uint8)

# save results
cv2.imwrite('img12_hardlight.png', result)

# show results
cv2.imshow('img12', img12)
cv2.imshow('mask', mask)
cv2.imshow('thresh', thresh)
cv2.imshow('result', result)
cv2.waitKey(0)
cv2.destroyAllWindows()

结果:

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68544861

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档