【问题标题】:seperating background image分离背景图像
【发布时间】:2018-09-11 20:31:02
【问题描述】:

我试图从背景中分离出人手的图像。我首先捕获了在我的情况下将是静态的背景,然后用手在其中捕获了图像。然后我使用 cv2.absdiff() 减去两个图像,但结果不如预期。请帮我解决这个问题。这是输出:

代码:

while(cap.isOpened()):

    grabbed, frame = cap.read()

    if not grabbed:
        continue

    Original_Image = frame.copy()
    Original_Image = cv2.cvtColor(contourFrame,cv2.COLOR_BGR2GRAY)

    Output_Image = cv2.absdiff(Background_Image, Original_Image)

【问题讨论】:

  • 我认为您添加了错误的图像作为Background image,因为它与输出相同并且看起来不像背景图像。
  • 非常感谢。我已经改了。
  • 看看this question 仅仅调用absdiff 显然是不够的。您需要找到前景对象的蒙版并将其应用于图像。
  • 选择 Diff_Image = cv2.absdiff(Background_Image, Original_Image) 和 Output_Mask = Diff_Image > 15 然后仅将蒙版像素复制到输出图像

标签: python opencv image-processing background-subtraction


【解决方案1】:

如果您仅从前景图像中减去背景图像,则无法分离前景对象,因为您通过减去它们隐藏的背景来更改它们(这将导致图像中出现两条丑陋的暗线) .可能的解决方案:仅在两个图像相等的区域从前景中减去背景(或与任意容差相当,以考虑轻微变化的照明条件)。对于图像,您很可能必须为背景和前景像素之间的差异添加特定的容差(可能是 15 到 25?),因为手挡住了入射光,因此背景图像比前景图像略亮。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-11
    • 2013-01-03
    • 1970-01-01
    • 1970-01-01
    • 2022-01-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多