📄 lgmm.h
字号:
#ifndef LGMMCUT_H
#define LGMMCUT_H
#include "cv.h"
#include "highgui.h"
#include "lgraph.h"
#include "lgmm.h"
#define LALPHA 0.05 //模型更新或学习速度的参数
#define LT 0.5 //决定背景模型的阈值
class LGM
{
public:
LGM();
virtual ~LGM();
void Init(unsigned char size, float *mean);
void Init(float *mean, float weight);
bool IsValid(float *value, float *distance);//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
void Update(float *value, float &distance);
void Update(void);
void Init_Update(float *distance, float sum);//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
float *m_mean;//模型均值
unsigned char m_size;//均值向量尺寸
float* m_variance;//模型标准方差
float m_weight;//模型权重
bool m_background;//是否为背景模型
long int m_time;//集焦或失焦时间(focus or unfocus, hit or miss)
};
class LGMM
{
public:
LGMM();
virtual ~LGMM();
void Init(unsigned char num, unsigned char size, float *mean);
bool Process(float *value);
void Init_Process(float *value);
void Norm(void);
unsigned char m_num;//高斯模型的个数
LGM **m_ptr;//指向高斯模型的指针
};
class CCameraVideo
{
public:
CvCapture* m_camcapture;
CWinThread *m_pThread; // 抓取图像的线程。
CImage orgImage4Show;
CImage m_ShowImage; // 供视图显示的图像。
IplImage* m_bg_Image,m_frame,m_image,hsv;
IplImage* m_bg_Image_S; //阴影背景模型
int m_imageWidth,m_imageHeight;
int P0,P1, P2, P3, P4, P5, P6; //参数设置
LGraph::node_id** node;
LGraph *g;
int pos; //图像序列号
LGMM *bgModel; //GMM背景模型
LGMM *bgModel_S; //shadow GMM背景模型
CString directoryname; //分割图像目录名
CString seqbmpfilenamehead; //分割图像的文件头,不仅是图像文件夹、目录名
IplImage *curImage,*hsvcurImage; //当前图像RGB数据和当前图像HSV数据
int P_eval_S; //参数设置
float P_RateMIN;
float P_RateMAX;
BOOL Pause();
BOOL fast_segment_runGmmCut_video();
CvCapture * m_videocapture;
// int 3sizeof_uchar;
// UINT ThreadMain(LPVOID pParam);
// CCamvideoView* pCCamvideoView;
// Operations
public:
void process();
void learnBgModel(CString imageFileDirectory); //从bmp中学习背景模型
void learnBgModel_video(); //从video中学习背景模型
void learnBgModel_S_video(); //从video中学习背景和阴影模型
uchar* cvGetpixelHSV(IplImage* img,int x,int y); //读取(x,y)点的HSV象素值,返回BYTE* 顺序是H/2,S,V(when 8bit)
BYTE* cvGetpixel(IplImage* img,int x,int y); //读取(x,y)点的RGB象素值,返回BYTE* 顺序是R,G,B
// float* cvGetpixel(IplImage* img,int x,int y,int i);
void constructGraph(IplImage* bg_image,IplImage* cur_Image); //静态graph cut
BOOL cvSetPixel(IplImage* img,int x,int y,int R,int G,int B); //写入(x,y)点的RGB象素值,返回BOOL
BOOL cvSetPixelHSV(IplImage* img,int x,int y,int H,int S,int V);//写入(x,y)点的HSV象素值,返回BOOL 顺序是H,S,V(when 8bit)
void destructGraph(); //释放graph空间
int runGmmCut(int index); //动态GMM Graph cut
void gmmCut(const int index,const int index_nmb); //静态单帧GMM Graph cut
void gmmCut_video(const int index,const int index_nmb);
//单步静态的Gmm Graph cut,在runGmmCut()动态Gmm Graph cut的前初始化graph,还有被按钮OnGMMGraph调用
BOOL GetParameters();
CCameraVideo(CvCapture* pCapture,CString pathname);
~CCameraVideo();
static UINT __cdecl StaticThreadMain(void *pvDocument);
void GrabNext();
// Implementation
};
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -