【问题标题】:OpenCV determine area of intersect/overlapOpenCV确定相交/重叠区域
【发布时间】:2017-02-22 21:07:35
【问题描述】:

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

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

我的目标是确定重叠区域并将其放入一个蒙版中,我可以将其应用于右上角的图像(即在图层上位于顶部的那个),这样我就可以根据距离使用任何有blender opencv使用或其他算法。

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

感谢任何帮助。

【问题讨论】:

    标签: python opencv blending


    【解决方案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) +src1 (a) =重叠 (c)

    希望对您有所帮助。

    【讨论】:

    • 谢谢伙计,这很有意义。我理解这个概念,但是如何规范图像区域?我的问题是结果分层/拼接图像是单个图像而不是具有多层的图像。
    • 抱歉,这里的规范是错误的名称——只要将所有像素值设置为 1 也可以解决问题。我现在正在扩展我的答案..
    • 谢谢伙计,这很好用,除了你的代码中的一件小事。 dst = np.zeros((100,100),dtype=np.int) 应该是 dst = np.zeros((100,100),np.uint8)。这真的很有帮助,谢谢
    • 所以我一直在摆弄这个,但我的问题是我没有使用方形边界。你知道我怎么能做这个确切的过程,但将轮廓的内部设置为 1
    • @C.Radford 你有没有找到一种方法来计算两个图像的重叠区域。我也在研究类似的图像拼接问题。我需要重叠区域来寻找接缝
    猜你喜欢
    • 2013-06-02
    • 1970-01-01
    • 1970-01-01
    • 2017-07-07
    • 1970-01-01
    • 2018-06-10
    • 1970-01-01
    • 2021-03-22
    • 1970-01-01
    相关资源
    最近更新 更多