在 OpenCV python 中使用无缝克隆生成带有“幽灵”对象的图像

jea*_*ean 4 python opencv blending computer-vision

我试图将一个具有完全紧密的已知蒙版的对象粘贴到图像上,因此它应该很容易,但是如果没有一些后期处理,我会在边界处得到人工制品。我想使用混合技术泊松混合来减少伪影。它是在 opencv 中实现的seamlessClone

import cv2
import matplotlib.pyplot as plt
#user provided tight mask array tight_mask of dtype uint8 with only white pixel the ones on the object the others are black (50x50x3)
tight_mask
#object obj to paste a 50x50x3 uint8 in color
obj
#User provided image im which is large 512x512 of a mostly uniform background in colors
im
#two different modes of poisson blending, which give approximately the same result
normal_clone=cv2.seamlessClone(obj, im, mask, center, cv2.NORMAL_CLONE)
mixed_clone=cv2.seamlessClone(obj, im, mask, center, cv2.MIXED_CLONE)
plt.imshow(normal_clone,interpolation="none")
plt.imshow(mixed_clone, interpolation="none")
Run Code Online (Sandbox Code Playgroud)

我只得到粘贴对象非常非常透明的图像。所以它们显然混合得很好,但它们混合得如此之多,以至于它们像物体的幽灵一样消失了。

我想知道我是否是唯一一个遇到此类问题的人,如果不是,那么在泊松混合方面有哪些替代方案?
我是否必须从头开始重新实现它以修改混合因子(甚至可能吗?),还有其他方法吗?我是否必须在面膜上使用扩张来减少混合?之后我可以以某种方式增强对比度吗?

jea*_*ean 7

实际上泊松混合就是利用图像中的梯度信息进行粘贴,将其混合到目标图像中。

事实证明,如果掩码完全紧密,则边界渐变会被人为地解释为空。这就是为什么它完全忽略它并产生鬼魂。

通过使用形态学操作扩大原始蒙版来使用更大的蒙版,因此包括一些背景是解决方案。

选择包含的背景颜色时必须小心,如果对比度太大,渐变会太强,图像不会很好地混合。使用像灰色这样的颜色是一个很好的起点。