【问题标题】:How to implement the code for shadow removal from mask in opencv?如何在opencv中实现从掩码中去除阴影的代码?
【发布时间】:2019-05-05 10:42:25
【问题描述】:

我在 opencv 中使用 MoG 方法检测静态背景帧中的移动对象,但它也检测阴影。我想从蒙版中移除阴影。我尝试使用灰色的阈值(因为阴影在掩码中标记为灰色),但阈值也删除了对象的灰色部分。我正在尝试实现https://pdfs.semanticscholar.org/53e0/7f60d03461def8ed4f765f2a6b7dfc4bfbd0.pdf 本文的算法。谁能告诉我如何在 python 中实现这个?

import cv2
import numpy as np

cap = cv2.VideoCapture('TownCentreXVID.avi')
fgbg = cv2.createBackgroundSubtractorMOG2()

while(1):

    _, frame = cap.read()
    mask = fgbg.apply(frame)



    kernel = np.ones((5,5),np.uint8)
    opening = cv2.morphologyEx(mask, cv2.MORPH_OPEN, kernel)
    closing = cv2.morphologyEx(mask, cv2.MORPH_CLOSE, kernel)

    window = cv2.namedWindow('Original', cv2.WINDOW_NORMAL| cv2.WINDOW_KEEPRATIO )
    window = cv2.namedWindow('Mask', cv2.WINDOW_NORMAL| cv2.WINDOW_KEEPRATIO)
    window = cv2.namedWindow('Opening', cv2.WINDOW_NORMAL| cv2.WINDOW_KEEPRATIO )
    #window = cv2.namedWindow('Closing', cv2.WINDOW_NORMAL| cv2.WINDOW_KEEPRATIO)

    cv2.imshow('Original',frame)
    cv2.imshow('Mask',thresh)
    cv2.imshow('Opening',opening)
    #cv2.imshow('Closing',closing)

    k = cv2.waitKey(5) & 0xFF
    if k == 27:
        break

cv2.destroyAllWindows()
cap.release()

【问题讨论】:

    标签: python-3.x opencv shadow-removal


    【解决方案1】:

    如果您使用BackgroundSubtractorMOG2BackgroundSubtractorKNN背景减法器,那么您可以轻松地将ShadowValue设置为false0

    mog2->setShadowValue(0);
    // Or
    knn->setShadowValue(0);
    

    它会移除遮罩上的阴影。

    阴影值 = true

    阴影值 = false

    【讨论】:

    • 我在 python 中使用 MoG2。
    • 无论您使用哪种编程语言都没有问题,您都可以传递值TrueFalse 来根据需要设置背景减法器的阴影值。正如你所说的你使用的是MoG2,我已经在使用MoG2或KNN的情况下提到过,它们都支持设置阴影值。你就像我回答中的例子一样。
    猜你喜欢
    • 2018-05-24
    • 2012-10-28
    • 1970-01-01
    • 2015-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多