OpenCV无缝克隆完成过程后的换档位置

时间:2017-12-15 06:49:55

标签: python-3.x image-processing opencv3.0

我正在尝试使用无缝克隆将图像混合在一起。 但我注意到在使用无缝克隆功能之后的区域 我要转移的面具向上移动。所以我有一个问题 这是无缝克隆功能的正常行为,还是一个bug 我的实施。

以下是源照片

enter image description here

以下是目标照片

enter image description here

以下是结果照片

enter image description here

2 个答案:

答案 0 :(得分:1)

(基于 Fractalic Forieu 发布的答案)您可以在不减小图像尺寸的情况下获得相同的结果。

而不是使用图像中心:

center = (width // 2, height // 2)
poissonImage = cv2.seamlessClone(srcImage, dstImage, maskImage, center)

使用边界矩形的中心:

monoMaskImage = cv2.split(maskImage)[0] # reducing the mask to a monochrome
br = cv2.boundingRect(monoMaskImage) # bounding rect (x,y,width,height)
centerOfBR = (br[0] + br[2] // 2, br[1] + br[3] // 2)
poissonImage = cv2.seamlessClone(srcImage, dstImage, maskImage, centerOfBR )

答案 1 :(得分:0)

我遇到了类似的情况。而且,就像@JoshuaCWebDeveloper指出的那样,当使用所有一个遮罩时,这种偏移消失了。不过,我已经解决了这个问题。我所做的就是这个。我使用cv2.boundingRect裁剪了有效的蒙版(非零子部分)。因此,我的源图像和蒙版图像被缩小为较小的尺寸,而中心现在是从boundingRect输出中计算出来的(因为在目标图像上标记了参考点)。这样,错误得以解决/转移得以解决。