Python 3.x 完成流程后,OpenCV无缝克隆轮班位置

Python 3.x 完成流程后,OpenCV无缝克隆轮班位置,python-3.x,image-processing,opencv3.0,Python 3.x,Image Processing,Opencv3.0,我试图用无缝克隆技术将图像融合在一起。 但我注意到,在使用无缝克隆功能后 我想转移的面具是向上移动的。所以我有一个问题 这是无缝克隆函数的正常行为还是一个bug 关于我的实施 这里是源照片 这是目的地的照片 这是结果照片 我遇到了类似的情况。此外,正如@JoshuaCWebDeveloper所指出的,当使用所有一个掩码时,这种变化消失了。尽管如此,我还是找到了解决办法。我所做的就是这样。我使用cv2.boundingRect裁剪出有效掩码(非零子部分)。所以我的源图像和遮罩图像被缩小到更小的

我试图用无缝克隆技术将图像融合在一起。 但我注意到,在使用无缝克隆功能后 我想转移的面具是向上移动的。所以我有一个问题 这是无缝克隆函数的正常行为还是一个bug 关于我的实施

这里是源照片

这是目的地的照片

这是结果照片


我遇到了类似的情况。此外,正如@JoshuaCWebDeveloper所指出的,当使用所有一个掩码时,这种变化消失了。尽管如此,我还是找到了解决办法。我所做的就是这样。我使用
cv2.boundingRect
裁剪出有效掩码(非零子部分)。所以我的源图像和遮罩图像被缩小到更小的尺寸,而中心现在是从boundingRect输出计算出来的(因为参考点标记在目标图像上)。这样就解决了错误/消除了移位。

(基于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 )

您好,您还记得您是否解决了此问题或问题是什么吗?我面临着一个类似的问题,在使用无缝克隆时,我的源照片稍微向左移动。有趣的是,我使用的面具似乎影响了这一点;使用全白色遮罩将不会导致移位。