如何从具有静态背景的视频中去除阴影?

时间:2019-04-25 16:38:00

标签: python-3.x opencv image-processing object-detection shadow-removal

我正在尝试检测运动物体并从具有静态背景的视频中消除阴影。我正在使用高斯混合(MOG)方法检测运动物体。我正在使用opencv3和python 3.5。如何去除视频和前景蒙版中的阴影?我已经使用侵蚀和膨胀来减少噪音。但这并不能消除阴影。

let contentViewController = SomeViewController()
contentViewController.preferredContentSize = view.frame.size

let bottomSheet = MDCBottomSheetController(contentViewController: otherViewController)
present(bottomSheet, animated: true, completion: nil)

1 个答案:

答案 0 :(得分:0)

backgroundsubtractor返回一个蒙版,其中前景对象为白色,阴影为灰色。
您可以使用thresholding创建不带阴影或仅带阴影的新蒙版。
使用没有阴影的蒙版仅获取前景。
使用仅带阴影的蒙版替换背景上的阴影(带有参考背景图像)。

结果:
enter image description here

代码:

import cv2
import numpy as np
# load image / mask
mask = cv2.imread("mask.png",0)
#threshold mask
ret, foreground = cv2.threshold(mask, 200, 255, cv2.THRESH_BINARY)
ret, shadow = cv2.threshold(mask, 200, 255, cv2.THRESH_TOZERO_INV)
# stack images vertically
res = np.concatenate((mask,foreground,shadow),axis=0)
#show image
cv2.imshow("Result",res)
cv2.waitKey(0)
cv2.destroyAllWindows()