/*
头文件:OurGaussmix2.h
*/
#include "opencv2/core/core.hpp"
#include <list>
#include"cv.h"
using namespace cv;//InputArray 等的定义在cv里面
namespace ourGaussmix
{ class BackgroundSubtractor: public cv::Algorithm
{
public:
virtual ~BackgroundSubtractor();
virtual void operator()(InputArray _image, OutputArray _fgmask, double learningRate);
virtual void getBackgroundImage(OutputArray backgroundImage,OutputArray backgroundImageslow) const;
}; class OurBackgroundSubtractorMOG2 : public BackgroundSubtractor
{
public:
OurBackgroundSubtractorMOG2();
OurBackgroundSubtractorMOG2(int history, float varThreshold, bool bShadowDetection=true);
virtual ~OurBackgroundSubtractorMOG2();
virtual void operator()(InputArray _image, OutputArray _fgmask, double learningRate);
virtual void getBackgroundImage(OutputArray backgroundImage,OutputArray backgroundImageslow) const;
virtual void initialize(Size frameSize, int frameType);
};
} /*
cpp文件
*/
namespace ourGaussmix
{
/****************************
static const 类型的默认参数
*****************************/ struct GaussBGStatModel2Params
{
//存储参数
}; struct GMM
{
float weight;
float variance;
}; /***基类中的虚函数都设为空的***/
BackgroundSubtractor::~BackgroundSubtractor() {}
void BackgroundSubtractor::operator()(InputArray _image, OutputArray _fgmask, double learningRate)
{
}
void BackgroundSubtractor::getBackgroundImage(OutputArray,OutputArray) const
{
} static CV_INLINE bool detectShadowGMM(const float* data, int nchannels, int nmodes,const GMM* gmm, const float* mean,
float Tb, float TB, float tau)
{
/*阴影检测函数内容*/
} /*定义一个结构体用来执行OurBackgroundSubtractorMOG2*/
struct MOG2Invoker
{
/*C++中结构体是一个特殊的类 下面的是构造函数*/
MOG2Invoker(const Mat& _src, Mat& _dst,
GMM* _gmm, float* _mean,
uchar* _modesUsed,
int _nmixtures, float _alphaT,
float _Tb, float _TB, float _Tg,
float _varInit, float _varMin, float _varMax,
float _prune, float _tau, bool _detectShadows,
uchar _shadowVal)
{
/*给结构体的参数赋值*/
} void operator()(const BlockedRange& range) const
{
/*混合高斯模型参数的更新*/
} }; OurBackgroundSubtractorMOG2::OurBackgroundSubtractorMOG2()
{
/*默认构造函数赋值 全部赋予默认值*/
}
OurBackgroundSubtractorMOG2::OurBackgroundSubtractorMOG2(int _history, float _varThreshold, bool _bShadowDetection)
{
/*构造函数赋值 部分自选 其他默认值*/
}
OurBackgroundSubtractorMOG2::~OurBackgroundSubtractorMOG2()
{
} void OurBackgroundSubtractorMOG2::initialize(Size _frameSize, int _frameType)
{
/*初始化函数 分配内存*/
//bgmodel.create( 1, frameSize.height*frameSize.width*nmixtures*(2 + nchannels), CV_32F );
//bgmodelUsedModes.create(frameSize,CV_8U);
//bgmodelUsedModes = Scalar::all(0);
} void OurBackgroundSubtractorMOG2::operator()(InputArray _image, OutputArray _fgmask, double learningRate)
{
/*判断是否初始化并调用initialize*/
//parallel_for(BlockedRange(0, image.rows),
// MOG2Invoker(image, fgmask,
// (GMM*)bgmodel.data,
// (float*)(bgmodel.data + sizeof(GMM)*nmixtures*image.rows*image.cols),
// bgmodelUsedModes.data, nmixtures, (float)learningRate,
// (float)varThreshold,
// backgroundRatio, varThresholdGen,
// fVarInit, fVarMin, fVarMax, float(-learningRate*fCT), fTau,
// bShadowDetection, nShadowDetection));
} void OurBackgroundSubtractorMOG2::getBackgroundImage(OutputArray backgroundImage,OutputArray backgroundImageslow) const
{ } }

这是opencv中混合高斯模型代码的结构梳理 parallel_for的部分没有看懂 整个的结构还是很清晰的 更新部分的代码写在了结构体MOG2Invoker的重载操作符()中,然后在OurBackgroundSubtractorMOG2的重载操作符()中调用MOG2Inovker。为什么这样写不清楚,会效率更高吗?

混合高斯模型:opencv中MOG2的代码结构梳理的更多相关文章

  1. [zz] 混合高斯模型 Gaussian Mixture Model

    聚类(1)——混合高斯模型 Gaussian Mixture Model http://blog.csdn.net/jwh_bupt/article/details/7663885 聚类系列: 聚类( ...

  2. Opencv混合高斯模型前景分离

    #include "stdio.h" #include "string.h" #include "iostream" #include &q ...

  3. OpenCV混合高斯模型函数注释说明

    OpenCV混合高斯模型函数注释说明 一.cvaux.h #define CV_BGFG_MOG_MAX_NGAUSSIANS 500 //高斯背景检测算法的默认参数设置 #define CV_BGF ...

  4. 运动检测(前景检测)之(二)混合高斯模型GMM

    运动检测(前景检测)之(二)混合高斯模型GMM zouxy09@qq.com http://blog.csdn.net/zouxy09 因为监控发展的需求,目前前景检测的研究还是很多的,也出现了很多新 ...

  5. 混合高斯模型(GMM)推导及实现

    作者:桂. 时间:2017-03-20  06:20:54 链接:http://www.cnblogs.com/xingshansi/p/6584555.html 声明:欢迎被转载,不过记得注明出处哦 ...

  6. 记录:EM 算法估计混合高斯模型参数

    当概率模型依赖于无法观测的隐性变量时,使用普通的极大似然估计法无法估计出概率模型中参数.此时需要利用优化的极大似然估计:EM算法. 在这里我只是想要使用这个EM算法估计混合高斯模型中的参数.由于直观原 ...

  7. 机器学习进阶-背景建模-(帧差法与混合高斯模型) 1.cv2.VideoCapture(进行视频读取) 2.cv2.getStructureElement(构造形态学的卷积) 3.cv2.createBackgroundSubtractorMOG2(构造高斯混合模型) 4.cv2.morpholyEx(对图像进行形态学的变化)

    1. cv2.VideoCapture('test.avi') 进行视频读取 参数说明:‘test.avi’ 输入视频的地址2. cv2.getStructureElement(cv2.MORPH_E ...

  8. PRML读书会第九章 Mixture Models and EM(Kmeans,混合高斯模型,Expectation Maximization)

    主讲人 网络上的尼采 (新浪微博: @Nietzsche_复杂网络机器学习) 网络上的尼采(813394698) 9:10:56 今天的主要内容有k-means.混合高斯模型. EM算法.对于k-me ...

  9. 混合高斯模型(Mixtures of Gaussians)和EM算法

    这篇讨论使用期望最大化算法(Expectation-Maximization)来进行密度估计(density estimation). 与k-means一样,给定的训练样本是,我们将隐含类别标签用表示 ...

随机推荐

  1. 【转载】VC维的来龙去脉

    本文转载自 火光摇曳 原文链接:VC维的来龙去脉 目录: 说说历史 Hoeffding不等式 Connection to Learning 学习可行的两个核心条件 Effective Number o ...

  2. [译]git log

    git log git log命令用来显示提交的快照. 能列出来你项目的历史, 能过滤和搜索你指定的一些修改. git status能让你检查工作目录和stage区的状态, git log只提供被co ...

  3. MapReduce的MapTask任务的运行源码级分析

    TaskTracker任务初始化及启动task源码级分析 这篇文章中分析了任务的启动,每个task都会使用一个进程占用一个JVM来执行,org.apache.hadoop.mapred.Child方法 ...

  4. Maven工程中报 Missing artifact jdk.tools:jdk.tools:

    jdk.tools:jdk.tools是与JDK一起分发的一个JAR文件,可以如下方式加入到Maven项目中:<dependency>    <groupId>jdk.tool ...

  5. 第四章第四个例题(LRJ)

    半年了,最起码的编程能力也谈不上啊,思维神马就更不不敢说了. 互联网时代讲求效率,走得慢和不走没有区别了. The war is on. (buhuidetiduokanduodajibianyehu ...

  6. CSU 1120 病毒(DP)

    题目链接:http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1120 解题报告:dp,用一个串去更新另一个串,递推方程是: if(b[i] > a ...

  7. SSH如何通过公钥连接云服务器

    导读 通常我们连接远程服务器(linux)windows下通过putty或xshell等工具远程连接.linux下可以直接通过ssh命令连接.其实这两者都是一致的,都是通过ssh协议进行传输. 如果我 ...

  8. hiberante入门

    Hibernate 目前企业级应用一般均采用面向对象的开发方法,而内存中的对象数据不能永久存在,如想借用关系数据库来永久保存这些数据的话,无疑就存在一个对象-关系的映射过程.在这种情形下,诞生了许多解 ...

  9. 破解Excel保护

    一.录制宏 二.停止录制 三.查看录制 四.点击编辑进入VB编辑环境 五.清空原有的内容,copy以下代码 Public Sub 工作表保护密码破解() Const DBLSPACE As Strin ...

  10. 35 网络相关函数(三)——live555源码阅读(四)网络

    35 网络相关函数(三)——live555源码阅读(四)网络 35 网络相关函数(三)——live555源码阅读(四)网络 简介 5)NoReuse不重用地址类 6)initializeWinsock ...