// This file has been generated by Py++.

#include "boost/python.hpp"
#include "__ctypes_integration.pypp.hpp"
#include "opencv_headers.hpp"
#include "BackgroundSubtractorMOG.pypp.hpp"

namespace bp = boost::python;

struct BackgroundSubtractorMOG_wrapper : cv::BackgroundSubtractorMOG, bp::wrapper< cv::BackgroundSubtractorMOG > {

    BackgroundSubtractorMOG_wrapper(cv::BackgroundSubtractorMOG const & arg )
    : cv::BackgroundSubtractorMOG( arg )
      , bp::wrapper< cv::BackgroundSubtractorMOG >(){
        // copy constructor
        
    }

    BackgroundSubtractorMOG_wrapper( )
    : cv::BackgroundSubtractorMOG( )
      , bp::wrapper< cv::BackgroundSubtractorMOG >(){
        // null constructor
    
    }

    BackgroundSubtractorMOG_wrapper(int history, int nmixtures, double backgroundRatio, double noiseSigma=0 )
    : cv::BackgroundSubtractorMOG( history, nmixtures, backgroundRatio, noiseSigma )
      , bp::wrapper< cv::BackgroundSubtractorMOG >(){
        // constructor
    
    }

    virtual void initialize( ::cv::Size frameSize, int frameType ) {
        if( bp::override func_initialize = this->get_override( "initialize" ) )
            func_initialize( frameSize, frameType );
        else{
            this->cv::BackgroundSubtractorMOG::initialize( frameSize, frameType );
        }
    }
    
    void default_initialize( ::cv::Size frameSize, int frameType ) {
        cv::BackgroundSubtractorMOG::initialize( frameSize, frameType );
    }

    virtual void operator()( ::cv::Mat const & image, ::cv::Mat & fgmask, double learningRate=0 ) {
        if( bp::override func___call__ = this->get_override( "__call__" ) )
            func___call__( boost::ref(image), boost::ref(fgmask), learningRate );
        else{
            this->cv::BackgroundSubtractorMOG::operator()( boost::ref(image), boost::ref(fgmask), learningRate );
        }
    }
    
    void default___call__( ::cv::Mat const & image, ::cv::Mat & fgmask, double learningRate=0 ) {
        cv::BackgroundSubtractorMOG::operator()( boost::ref(image), boost::ref(fgmask), learningRate );
    }

};

void register_BackgroundSubtractorMOG_class(){

    bp::class_< BackgroundSubtractorMOG_wrapper, bp::bases< cv::BackgroundSubtractor > >( "BackgroundSubtractorMOG", bp::init< >() )    
        .add_property( "this", pyplus_conv::make_addressof_inst_getter< cv::BackgroundSubtractorMOG >() )    
        .def( bp::init< int, int, double, bp::optional< double > >(( bp::arg("history"), bp::arg("nmixtures"), bp::arg("backgroundRatio"), bp::arg("noiseSigma")=0 )) )    
        .def( 
            "initialize"
            , (void ( ::cv::BackgroundSubtractorMOG::* )( ::cv::Size,int ) )(&::cv::BackgroundSubtractorMOG::initialize)
            , (void ( BackgroundSubtractorMOG_wrapper::* )( ::cv::Size,int ) )(&BackgroundSubtractorMOG_wrapper::default_initialize)
            , ( bp::arg("frameSize"), bp::arg("frameType") ) )    
        .def( 
            "__call__"
            , (void ( ::cv::BackgroundSubtractorMOG::* )( ::cv::Mat const &,::cv::Mat &,double ) )(&::cv::BackgroundSubtractorMOG::operator())
            , (void ( BackgroundSubtractorMOG_wrapper::* )( ::cv::Mat const &,::cv::Mat &,double ) )(&BackgroundSubtractorMOG_wrapper::default___call__)
            , ( bp::arg("image"), bp::arg("fgmask"), bp::arg("learningRate")=0 ) )    
        .def_readwrite( "backgroundRatio", &cv::BackgroundSubtractorMOG::backgroundRatio )    
        .def_readwrite( "bgmodel", &cv::BackgroundSubtractorMOG::bgmodel )    
        .def_readwrite( "frameSize", &cv::BackgroundSubtractorMOG::frameSize )    
        .def_readwrite( "frameType", &cv::BackgroundSubtractorMOG::frameType )    
        .def_readwrite( "history", &cv::BackgroundSubtractorMOG::history )    
        .def_readwrite( "nframes", &cv::BackgroundSubtractorMOG::nframes )    
        .def_readwrite( "nmixtures", &cv::BackgroundSubtractorMOG::nmixtures )    
        .def_readwrite( "noiseSigma", &cv::BackgroundSubtractorMOG::noiseSigma )    
        .def_readwrite( "varThreshold", &cv::BackgroundSubtractorMOG::varThreshold );

}
