OpenCV Blob检测

2024 年 8 月 29 日 | 阅读 3 分钟

Blob 代表 二值大对象,指的是二值图像中连接的像素。“大”一词侧重于特定大小的对象,而其他“小”二值对象通常是噪声。关于 BLOB 分析有三个过程。

BLOB 提取

BLOB 提取意味着分离二值图像中的 BLOB(对象)。一个 BLOB 包含一组连接的像素。我们可以通过连通性来确定两个像素是否连接,即哪个像素是另一个像素的邻居。有两种类型的连通性。8 连通性4 连通性。8 连通性比 4 连通性好得多。

BLOB 表示

BLOB 表示只是意味着将 BLOB 转换为一些代表性的数字。在 BLOB 提取之后,下一步是对几个 BLOB 进行分类。BLOB 表示过程有两个步骤。在第一步中,每个 BLOB 由几个特征表示,第二步是应用一些匹配方法来比较每个 BLOB 的特征。

BLOB 分类

在这里,我们确定 BLOB 的类型,例如,给定的 BLOB 是否为圆形。这里的问题是如何根据我们前面描述的特征来定义哪些 BLOB 是圆形的,哪些不是圆形的。为此,通常我们需要制作我们正在寻找的对象的原型模型。

如何执行背景减法?

背景减法被广泛用于生成前景掩码。二值图像包含属于场景中移动对象的像素。背景减法计算前景掩码,并在当前帧和背景模型之间执行减法。

背景建模主要有两个步骤

  • 背景初始化- 在此步骤中,计算背景的初始模型。
  • 背景更新- 在此步骤中,更新模型以适应场景中的可能变化。

从第一帧手动减法

首先,我们导入库并加载视频。接下来,我们获取视频的第一帧,将其转换为灰度,并应用高斯模糊以去除一些噪声。我们使用 while 循环,因此我们逐个加载帧。完成此操作后,我们得到减法的核心部分,即我们计算第一帧和当前帧之间的绝对差。

示例-1

使用 Subtractor MOG2 的减法

OpenCV 提供了减法器 MOG2,它比手动模式更有效。Subtractor MOG2 的好处是可以使用帧历史记录。语法如下

第一个参数,history 是最后一帧的编号(默认为 120)。

第二个参数,varThreshold 是用于评估差异以提取背景的值。较低的阈值将发现更多变化,但图像会更嘈杂。

第三个参数,detectShadows 是算法的功能,如果启用,可以去除阴影。

示例-2

在上面的代码中,cv2.VideoCapture("filename") 接受包含文件的完整路径,其中 cv2.createBackgroundSubtractorMOG2() 将从视频文件中排除背景。


下一话题Canny 边缘检测