CV_IMPL CvBGStatModel* cvCreateGaussianBGModel( IplImage* first_frame, CvGaussBGStatModelParams* parameters ) { CvGaussBGStatModelParams params; CV_Assert( CV_IS_IMAGE(first_frame) ); //init parameters if( parameters == NULL ) { /* These constants are defined in cvaux/include/cvaux.h: */ params.win_size = CV_BGFG_MOG_WINDOW_SIZE; params.bg_threshold = CV_BGFG_MOG_BACKGROUND_THRESHOLD; params.std_threshold = CV_BGFG_MOG_STD_THRESHOLD; params.weight_init = CV_BGFG_MOG_WEIGHT_INIT; params.variance_init = CV_BGFG_MOG_SIGMA_INIT*CV_BGFG_MOG_SIGMA_INIT; params.minArea = CV_BGFG_MOG_MINAREA; params.n_gauss = CV_BGFG_MOG_NGAUSSIANS; } else params = *parameters; CvGaussBGModel* bg_model = new CvGaussBGModel; memset( bg_model, 0, sizeof(*bg_model) ); bg_model->type = CV_BG_MODEL_MOG; bg_model->release = (CvReleaseBGStatModel)icvReleaseGaussianBGModel; bg_model->update = (CvUpdateBGStatModel)icvUpdateGaussianBGModel; bg_model->params = params; //prepare storages bg_model->g_point = (CvGaussBGPoint*)new cv::Mat(); bg_model->background = cvCreateImage(cvSize(first_frame->width, first_frame->height), IPL_DEPTH_8U, first_frame->nChannels); bg_model->foreground = cvCreateImage(cvSize(first_frame->width, first_frame->height), IPL_DEPTH_8U, 1); bg_model->storage = cvCreateMemStorage(); bg_model->countFrames = 0; icvUpdateGaussianBGModel( first_frame, bg_model, 1 ); return (CvBGStatModel*)bg_model; }
CV_IMPL CvBGStatModel* cvCreateGaussianBGModel( IplImage* first_frame, CvGaussBGStatModelParams* parameters ) { CvGaussBGStatModelParams params; CV_Assert( CV_IS_IMAGE(first_frame) ); //init parameters if( parameters == NULL ) { // These constants are defined in cvaux/include/cvaux.h params.win_size = CV_BGFG_MOG_WINDOW_SIZE; params.bg_threshold = CV_BGFG_MOG_BACKGROUND_THRESHOLD; params.std_threshold = CV_BGFG_MOG_STD_THRESHOLD; params.weight_init = CV_BGFG_MOG_WEIGHT_INIT; params.variance_init = CV_BGFG_MOG_SIGMA_INIT*CV_BGFG_MOG_SIGMA_INIT; params.minArea = CV_BGFG_MOG_MINAREA; params.n_gauss = CV_BGFG_MOG_NGAUSSIANS; } else params = *parameters; CvGaussBGModel* bg_model = new CvGaussBGModel; memset( bg_model, 0, sizeof(*bg_model) ); bg_model->type = CV_BG_MODEL_MOG; bg_model->release = (CvReleaseBGStatModel)icvReleaseGaussianBGModel; bg_model->update = (CvUpdateBGStatModel)icvUpdateGaussianBGModel; bg_model->params = params; cv::Ptr<cv::BackgroundSubtractor> mog = cv::createBackgroundSubtractorMOG(params.win_size, params.n_gauss, params.bg_threshold); cv::Ptr<cv::BackgroundSubtractor>* pmog = new cv::Ptr<cv::BackgroundSubtractor>; *pmog = mog; bg_model->mog = pmog; CvSize sz = cvGetSize(first_frame); bg_model->background = cvCreateImage(sz, IPL_DEPTH_8U, first_frame->nChannels); bg_model->foreground = cvCreateImage(sz, IPL_DEPTH_8U, 1); bg_model->countFrames = 0; icvUpdateGaussianBGModel( first_frame, bg_model, 1 ); return (CvBGStatModel*)bg_model; }