OpenCV视觉分析之运动分析(5)背景减除类BackgroundSubtractorMOG2的使用

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

算法描述

基于高斯混合模型的背景/前景分割算法。

该类实现了在文献[320][319]中描述的高斯混合模型背景减除。

cv::BackgroundSubtractorMOG2 类是 OpenCV 中用于背景减除的一种实现方式,它基于 Gaussian Mixture Model with a recursive algorithm (GMM) 来估计背景模型。这种模型对于动态场景下的背景减除非常有效,因为它可以适应背景的变化并且对光照变化有一定的鲁棒性。

主要成员函数

函数apply()

计算一个前景掩码

函数原型
cpp 复制代码
virtual void cv::BackgroundSubtractorMOG2::apply
(
	InputArray 	image,
	OutputArray 	fgmask,
	double 	learningRate = -1 
)		
参数
  • 参数image 下一个视频帧。浮点帧将不经缩放直接使用,且应处于[0,255]范围内。
  • 参数fgmask 作为8位二值图像的输出前景掩码。
  • 参数learningRate 取值范围在0到1之间,表示背景模型的学习速度。参数的负值会使算法使用某种自动选择的学习率。0意味着背景模型完全不更新,1意味着背景模型将完全重新初始化为最近一帧的状态。

代码示例

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

int main( int argc, char** argv )
{
    // 创建一个 BackgroundSubtractorMOG2 对象
    cv::Ptr< cv::BackgroundSubtractor > pBackSub = cv::createBackgroundSubtractorMOG2( 500,  // 设置历史帧数
                                                                                       16,   // 设置方差阈值
                                                                                       true  // 启用阴影检测
    );

    // 打开视频文件
    cv::VideoCapture capture( 0);
    if ( !capture.isOpened() )
    {
        std::cerr << "Failed to open video file." << std::endl;
        return -1;
    }

    // 读取每一帧并处理
    cv::Mat frame, fgMask;
    while ( capture.read( frame ) )
    {
        // 应用背景减除
        pBackSub->apply( frame, fgMask );

        // 显示结果
        cv::imshow( "Frame", frame );
        cv::imshow( "FG Mask", fgMask );

        // 按 'q' 键退出
        if ( cv::waitKey( 30 ) == 'q' )
        {
            break;
        }
    }

    // 释放资源
    capture.release();
    cv::destroyAllWindows();

    return 0;
}

运行结果

效果比BackgroundSubtractorKNN好很多

相关推荐
云雾J视界几秒前
AI服务器供电革命:为何交错并联Buck成为算力时代的必然选择
服务器·人工智能·nvidia·算力·buck·dgx·交错并联
阳艳讲ai4 分钟前
九尾狐AI:重构企业AI生产力的实战革命
大数据·人工智能
大势智慧9 分钟前
大势智慧与土耳其合作发展中心、蕾奥规划签署土耳其智慧城市项目战略合作协议
人工智能·ai·智慧城市·三维建模·实景三维·发展趋势·创新
爱看科技13 分钟前
苹果Siri或升级机器人“CAMPOS”亮相,微美全息加速AI与机器人结合培育动能
人工智能·microsoft·机器人
Nowl13 分钟前
基于langchain的个人情感陪伴agent
人工智能·机器学习·langchain
UI设计兰亭妙微13 分钟前
零售门店选址评估小程序界面设计
人工智能·小程序·零售
泰克生物14 分钟前
噬菌体展示技术:基因改造赋能的多领域分子筛选与创新工具
人工智能·基因编辑·精准医疗·噬菌体展示技术·抗体药物研发·抗体筛选·m13 噬菌体
杜子不疼.15 分钟前
【Linux】基础IO(一):C 接口文件讲解
linux·c语言·开发语言·人工智能
啊阿狸不会拉杆15 分钟前
《机器学习》 第 9 章 - 深度强化学习
人工智能·算法·机器学习·计算机视觉·ai·ml
沛沛老爹17 分钟前
从Web到AI:多模态Agent Skills开发实战——JavaScript+Python全栈赋能视觉/语音能力
java·开发语言·javascript·人工智能·python·安全架构