概述

✔️ 背景减除(Background Subtraction)是许多基于计算机视觉的任务中的主要预处理步骤。

✔️ 如果有完整的静止的背景帧,可以通过帧差法来计算像素差从而获取到前景对象。但是在大多数情况下,没有这样的图像,所以需要从拥有的任何图像中提取背景。当运动物体有阴影时,由于阴影也在移动,情况会变的变得更加复杂。为此引入了背景减除算法,通过这一方法我们能够从视频中分离出运动的物体前景,从而达到目标检测的目的。

背景消除

✔️ OpenCV中常用的两种背景消除方法,一种是基于高斯混合模型GMM实现的背景提取,另外一种是基于最近邻KNN实现的。




opencv python实现 去除图像中的雀斑 opencv中怎么去除图像的阴影_叶片轮廓提取代码


GMM模型

背景:

  • MOG2算法,高斯混合模型分离算法,基于Z.Zivkovic发布的两篇论文,即2004年发布的“Improved adaptive Gausian mixture model for background subtraction”和2006年发布的“Efficient Adaptive Density Estimation per Image Pixel for the Task of Background Subtraction”中提出
  • 它为每个像素选择适当数量的高斯分布,它可以更好地适应不同场景的照明变化等

API:


cv2


参数解释如下: - history表示过往帧数,500帧,选择history = 1就变成两帧差 - varThreshold表示像素与模型之间的马氏距离,值越大,只有那些最新的像素会被归到前景,值越小前景对光照越敏感。 - detectShadows 是否保留阴影检测,请选择False这样速度快点。

KNN模型

背景:

KNN算法(K-nearest neigbours - based Background/Foreground Segmentation Algorithm)。2006年,由Zoran Zivkovic 和Ferdinand van der Heijden在论文"Efficient adaptive density estimation per image pixel for the task of background subtraction."中提出。

API:


cv2.createBackgroundSubtractorKNN()


实例分析

背景

✔️ 引用Opencv官方Example里的视频 vtest.mp4 来实现背景消除和ROI行人提取。

方法

✔️ 主要通过视频中的背景进行建模,实现背景消除,生成mask图像,通过对mask二值图像分析实现对前景活动对象的区域的提取,整个步骤如下: 1. 初始化背景建模对象GMM 2. 读取视频一帧 3. 使用背景建模消除生成mask 4. 对mask进行轮廓分析提取ROI 5. 绘制ROI对象

代码


import


opencv python实现 去除图像中的雀斑 opencv中怎么去除图像的阴影_github_02

Input


opencv python实现 去除图像中的雀斑 opencv中怎么去除图像的阴影_ci_03

Front Mask

opencv python实现 去除图像中的雀斑 opencv中怎么去除图像的阴影_目标检测_04

Result