OpenCV 中用于背景分割的一个类cv::bgsegm::BackgroundSubtractorGMG

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

算法描述

cv::bgsegm::BackgroundSubtractorGMG 是 OpenCV 中用于背景分割的一个类,它实现了基于贝叶斯推理的背景建模算法(Bayesian inference-based background modeling algorithm)。这个算法特别适合处理复杂的背景变化,例如光照变化、动态背景等。

主要特点

  • 适应性强:能够很好地适应光照变化和其他环境变化。
  • 初始化过程:需要一定数量的帧来初始化背景模型,默认是前 120 帧。
  • 噪声过滤:通过形态学操作去除前景掩码中的噪声。

构造函数

在较新的 OpenCV 版本中,通常不直接使用构造函数来创建 BackgroundSubtractorGMG 实例,而是通过工厂方法 cv::bgsegm::createBackgroundSubtractorGMG() 来创建。这是因为 OpenCV 将许多对象的创建封装到了这些工厂方法中,以便更好地管理内存和配置参数。

cpp 复制代码
Ptr<BackgroundSubtractorGMG> cv::bgsegm::createBackgroundSubtractorGMG
(
    int initializationFrames = 120, 
    double decisionThreshold = 0.8
);

参数:

  • initializationFrames: 初始化背景模型所需的帧数,默认值为 120。
  • decisionThreshold: 决策阈值,超过该阈值则认为是前景像素,默认值为 0.8。

主要方法

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;
    }

    // 创建 GMG 背景减除器
    cv::Ptr< cv::bgsegm::BackgroundSubtractorGMG > bgSubtractor = cv::bgsegm::createBackgroundSubtractorGMG();

    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;
}

运行结果

白色的是运动的物体,后面静止的背景都没了。

相关推荐
2601_965619695 分钟前
没时间给开源项目做宣传?AI自动化生成整套物料
人工智能·开源·自动化
CCblandy12 分钟前
前缀缓存命中率不靠引擎靠排列:本机仿真 3 轮,易变字段放开头 98.0%→0.0%
人工智能·python·算法·自然语言处理·性能优化
DisonTangor34 分钟前
MOSS-Image-Base 实战:从文生图到 JSON 布局精准控图
人工智能·ai作画·开源·aigc·1024程序员节
INDEMIND39 分钟前
INDEMIND携Donutbot“多多”亮相2026科大讯飞1024开发者节
人工智能·具身机器人·陪伴机器人·donutbot
forest_0942 分钟前
用Python复刻ClaudeDuet:主动式Agent四件套,定时晨报、后台巡检、危险动作审批(附完整可运行代码)
人工智能·python·架构·prompt·agi
我叫洋洋1 小时前
用 Qoder(AI 编程助手)把 Cadence 16.6 从零配到能画板
人工智能·单片机·嵌入式硬件·电路·1024程序员节
代码山河1 小时前
大模型的幻觉是什么?为什么会产生幻觉
人工智能·ai·大模型
数聚天成DeepSData2 小时前
验收一批标注数据时,一致性到底在比谁和谁
人工智能·深度学习·机器学习·数据集·deepsdata
码农小白AI2 小时前
监督抽查报告要素不全?IACheck AI 报告文档审核 Agent 做报告要素完整性审查
人工智能
海宇AI2 小时前
零信任架构实战:基于海宇行驶OCR证识别构建自动化租车车队行驶证电子档案网关
运维·人工智能·架构·自动化·1024程序员节