【发布时间】:2021-10-03 06:39:59
【问题描述】:
所以我目前在下面有 2 张图片。这些是在图像的前景和背景部分使用神经风格转移网络获得的。
使用的代码如下:
add = cv2.add(image1, image2)
cv2.imshow('Addition', add)
cv2.waitKey(0)
cv2.destroyAllWindows()
我已将它们合并以创建以下结果图像:
但是,我想在获得的图片上使用显着性蒙版。显着面具在下面。我尝试将掩码参数输入到 add 函数但没有运气。我试过看这篇文章,但不知道该怎么做Add 2 images together based on a mask
编辑:
发现问题是我没有转换数据类型。更新后的代码是:
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)
但是,生成的图像是,我不确定为什么:
【问题讨论】:
-
add = cv2.add(image1, image2, mask=maskimage)其中 maskimage 为 8 位,单通道(灰度)。如果这不符合您的要求,请说明您希望蒙版如何针对这两个图像起作用。所有 3 张图片的宽度和高度必须相同,并正确对齐。 -
所以我尝试了这个。我很确定这 3 个图像的尺寸相同,我尝试将它们分成 3 个不同的图像。但是我在函数'cv::arithm_op'中收到以下错误(-215:断言失败)(mtype == CV_8UC1 || mtype == CV_8SC1)&& _mask.sameSize(*psrc1)。我尝试查看尺寸并重塑所有内容,使它们相同,但仍然没有运气。
-
每张图片的形状是什么?你能把那个贴出来吗?据我所知,您发布的蒙版图像与其他两张图像的尺寸不同。同时发布 dtypes。
-
我已经添加了我发现的问题,但仍然得到一个奇怪的结果。
-
您真的要这样添加它们吗?也许将一个乘以掩码,并将另一个乘以掩码的倒数。假设每个图像和掩码是 8 位,将每个除以 255。然后添加它们,剪辑到范围 0 到 255 并确保结果为 8 位。
result=(I1*Mask+I2*(255-Mask))/255然后result=result.clip(0,255).astype(np.uint8)
标签: python opencv image-processing style-transfer