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

BLOB提取

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

BLOB表示

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

BLOB分类

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

import cv2  
import numpy as np;  
  
img = cv2.imread(r"filename", cv2.IMREAD_GRAYSCALE)  
# Set up the detector with default parameters.  
detector = cv2.SimpleBlobDetector()  
  
# Detecting blobs.  
keypoints = detector.detect(img)  
# Draw detected blobs as red circles.  
# cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS ensures the size of the circle corresponds to the size of blob  
im_with_keypoints = cv2.drawKeypoints(img, keypoints, np.array([]), (0, 0, 255),  
                                      cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)  
# Show keypoints  
cv2.imshow("Keypoints", im_with_keypoints)  
cv2.waitKey(0)  

如何执行背景减法?

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

背景建模有两个主要步骤

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

从第一帧手动减法

首先,我们导入库并加载视频。接下来,我们获取视频的第一帧,将其转换为灰度,并应用高斯模糊以消除一些噪音。我们使用while循环,以便逐帧加载。完成这些步骤后,我们得到了减法的背景的核心部分,其中计算了第一帧与当前帧之间的绝对差异。

示例-1

import cv2  
import numpy as np  
cap = cv2.VideoCapture(0)  
  
first_frame = cap.read()  
first_gray = cv2.cvtColor(first_frame,)  
first_gray_col = cv2.GaussianBlur(first_gray, (5, 5), 0)  
  
while True:  
    frame = cap.read()  
    gray_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)  
    gray_frame = cv2.GaussianBlur(gray_frame, (5, 5), 0)  
  
difference = cv2.absdiff(first_gray, gray_frame)  
difference = cv2.threshold(difference, 25, 255, cv2.THRESH_BINARY)  

使用Subtractor MOG2进行减法

OpenCV提供了比手动模式更有效的Subtractor MOG2。 Subtractor MOG2具有使用帧历史的优势。语法如下:

cv2.createBackgroundSubtractorMOG2(history, varTheshold, detectShadow)  

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

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

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

示例-2:

import cv2  
import numpy as np  
cap = cv2.VideoCapture("filename")  
  
subtractor = cv2.createBackgroundSubtractorMOG2(history=100, varThreshold=50, detectShadows=True)  
  
while True:  
    _, frame = cap.read()  
    mask = subtractor.apply(frame)  
    cv2.imshow("Frame", frame)  
    cv2.imshow("mask", mask)  
    key = cv2.waitKey(30)  
    if key == 27:  
        break  
cap.release()  
cv2.destroyWindowKey()  

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

标签: OpenCV, OpenCV教程, OpenCV图像识别, OpenCV安装教程, OpenCV下载, OpenCV入门, OpenCV基础, OpenCV库, OpenCV学习, OpenCV指南, OpenCV教程中文版, OpenCV快速入门, OpenCV基础教程