OpenCV确定交叉/重叠区域

时间:2017-02-22 21:07:36

标签: python opencv blending

我正在使用OpenCV和python创建一个拼接程序,目前我正在很好地缝合图像,现在我正在尝试将它们混合在一起。最终的目标是使用图形切割来更好地缝合它们,但是现在我只是基于它们发现的单应性来重叠图像。

这是拼接两张图片时我当前结果的照片。 enter image description here

我的目标是确定重叠区域并将其放入一个可以应用于右上角图像的面具(就层数而言就是顶部的一个),这样我就可以根据距离使用任何颜色进行混合有blender opencv使用或其他算法。

这是我正在寻找的视觉效果。 enter image description here

感谢任何帮助。

1 个答案:

答案 0 :(得分:3)

如何创建两者的掩码/二进制映像并使用逻辑AND?

您还可以将每个图像的灰度值副本(图像内容全部为1)转换为目标的新副本(用零初始化)。

然后添加所有这些目标图像。 然后会覆盖0的区域,1覆盖,2 to n意味着2 to n图像覆盖。

使用numpy的广播工具时,这非常简单有效。

import cv2
import numpy as np

#our target area (the black background)
dst = np.zeros((100,100),dtype=np.int)
src1 = dst.copy() 
src2 = dst.copy()
src1[50:,50:] = 1 #fake of first translated image (row/col 50-end)
src2[:70,:70] = 1 #fake of second translated image (row/col 0-70)

overlap = src1+src2 #sum of both *element-wise*

cv2.imwrite('a.png', src1*255) #opencv likes it's grey images span from 0-255
cv2.imwrite('b.png', src2*255) #...
cv2.imwrite('c.png', overlap*127) #here vals 0-2, *127 gives (almost) 255 again

np.where(overlap==2) #gives you a mask with all pixels that have value 2

src2(b) enter image description here + src1(a) enter image description here =重叠(c) enter image description here

希望有所帮助。