OpenCV 确定 intersect/overlap 的区域

OpenCV determine area of intersect/overlap

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

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

我的目标是确定重叠区域并将其放入我可以应用到右上角图像的遮罩中(即在图层方面位于顶部的图像),以便我可以根据距离混合它使用任何 blender opencv 使用或其他算法。

这是我正在寻找的视觉效果。

感谢任何帮助。

如何创建两者的 mask/binary 图像并使用逻辑与?

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

然后将所有这些目标图像相加。 带有 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) + src1 (a) =重叠(c)

希望对您有所帮助。