OpenCV 中用于背景分割(背景建模)的一个类cv::bgsegm::BackgroundSubtractorGSOC

  • 操作系统:ubuntu22.04
  • OpenCV版本:OpenCV4.9
  • IDE:Visual Studio Code
  • 编程语言:C++11

算法描述

cv::bgsegm::BackgroundSubtractorGSOC 是 OpenCV 中用于背景分割(背景建模)的一个类,它是基于 GMM(Gaussian Mixture Model)改进的算法。GSOC 指的是 Google Summer of Code 项目,其中这个背景减除算法被开发并集成到了 OpenCV 的 bgsegm 模块中。

主要特点

  • 改进的 GMM 算法:基于 Z.Zivkovic 的自适应高斯混合模型,并在此基础上进行了优化。
  • 颜色和梯度信息:不仅使用颜色信息,还利用了图像梯度来提高前景检测的准确性。
  • 适应性强:能够很好地适应光照变化和其他环境变化。
  • 参数可调:允许用户通过调整多个参数来优化背景建模过程。

构造函数

与大多数现代 OpenCV 背景减除器一样,不直接使用构造函数创建 BackgroundSubtractorGSOC 实例,而是通过工厂方法 cv::bgsegm::createBackgroundSubtractorGSOC() 来创建实例。

cpp 复制代码
Ptr<BackgroundSubtractorGSOC> cv::bgsegm::createBackgroundSubtractorGSOC
(
    int mc = 3,
    bool nSamples = 20,
    float replaceRate = 0.003f,
    float propagationRate = 0.01f,
    bool hitsThreshold = 32,
    float alpha = 0.01f,
    float beta = 0.0022f,
    float blinkingSupressionDecay = 0.1f,
    float blinkingSupressionMultiplier = 0.1f,
    float noiseRemovalThresholdFacBG = 0.0004f,
    float noiseRemovalThresholdFacFG = 0.0008f
);

参数:

  • mc: 每个像素的最大成分数量,默认值为 3。
  • nSamples: 需要初始化的样本数,默认值为 20。
  • replaceRate: 新样本替换旧样本的概率,默认值为 0.003。
  • propagationRate: 成分传播的概率,默认值为 0.01。
  • hitsThreshold: 前景判断的命中阈值,默认值为 32。
  • alpha: 学习率,默认值为 0.01。
  • beta: 背景更新速率,默认值为 0.0022。
  • blinkingSupressionDecay: 闪烁抑制衰减因子,默认值为 0.1。
  • blinkingSupressionMultiplier: 闪烁抑制乘数,默认值为 0.1。
  • noiseRemovalThresholdFacBG: 背景噪声移除阈值因子,默认值为 0.0004。
  • noiseRemovalThresholdFacFG: 前景噪声移除阈值因子,默认值为 0.0008。

主要函数

apply函数

函数原型
cpp 复制代码
void apply
(
	InputArray image, OutputArray fgmask, double learningRate=-1
);
参数
  • image: 输入当前帧。
  • fgmask: 输出前景掩码图像。
  • learningRate: 学习率,决定了新获取的信息对模型的影响速度。默认值 -1 表示自动选择学习率。

getBackgroundImage函数

函数原型
cpp 复制代码
void getBackgroundImage
(
	OutputArray backgroundImage
) const;
参数
  • backgroundImage: 输出背景图像。

代码示例

cpp 复制代码
#include <opencv2/bgsegm.hpp>
#include <opencv2/opencv.hpp>

int main()
{
    cv::VideoCapture cap( 0 );  // 打开摄像头
    if ( !cap.isOpened() )
    {
        std::cerr << "无法打开摄像头!" << std::endl;
        return -1;
    }

    // 创建 GSOC 背景减除器
    cv::Ptr< cv::bgsegm::BackgroundSubtractorGSOC > bgSubtractor = cv::bgsegm::createBackgroundSubtractorGSOC();

    cv::Mat frame, fgMask;

    while ( true )
    {
        cap >> frame;  // 获取新帧
        if ( frame.empty() )
            break;  // 到达视频结尾

        bgSubtractor->apply( frame, fgMask );  // 应用背景减除器

        cv::imshow( "Original Frame", frame );
        cv::imshow( "Foreground Mask", fgMask );

        if ( cv::waitKey( 30 ) >= 0 )
            break;  // 按任意键退出
    }

    return 0;
}

运行结果

白色的是运动的物体

相关推荐
Elastic 中国社区官方博客6 小时前
搜索倍增器:推动收入、生产力和 AI 实现规模化
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索
wjkjpcba6 小时前
机器人控制板PCBA怎么加工?从SMT贴片到BGA焊接解析机器人电子制造工艺
大数据·人工智能
青 春 记 忆6 小时前
Dify Docker Compose 通用无损升级指南:从备份、双版本预演到切换与回滚
运维·人工智能·python·docker·容器
小猪妈咪爱学法6 小时前
欧盟最新发布《AI数字综合法案(Digital Omnibus‑on‑AI,AI综合修订法案)
人工智能·网络安全
ZGIAI6 小时前
ZGI Workflow 变量池:接住节点输出
人工智能·架构
梵构广告7 小时前
提升品牌识别度有哪些方法?
人工智能
ZGIAI7 小时前
ZGI 记忆隔离:多人共用不串号
人工智能·架构
星栈独行7 小时前
决定 Agent 交付下限的「操作系统」:Harness 六层架构拆解
人工智能·架构
AKAMAI8 小时前
实时可观测性:Akamai Cloud Pulse 警报功能正式发布
人工智能·云计算
Capricorn19888 小时前
解决全网抄 Karpathy 导致的 LLM Wiki 污染?基于知芽 Notebook Skill 的 raw/ 笔记法排障指南
大数据·论文阅读·人工智能·笔记·论文笔记