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

#include "boost/python.hpp"
#include "__call_policies.pypp.hpp"
#include "opencv_converters.hpp"
#include "__ctypes_integration.pypp.hpp"
#include "opencv_headers.hpp"
#include "SURF.pypp.hpp"

namespace bp = boost::python;

static boost::python::object __call___8fbaf2f3b7cf23fdd67db0f4874c6b20( ::cv::SURF const & inst, ::cv::Mat const & img, ::cv::Mat const & mask ){
    std::vector<cv::KeyPoint, std::allocator<cv::KeyPoint> > keypoints2;
    bp::list keypoints3;
    inst.operator()(img, mask, keypoints2);
    convert_from_T_to_object(keypoints2, keypoints3);
    return bp::object( keypoints3 );
}

static boost::python::object __call___8904ace00c2f24b8eb00d3aa8ac85014( ::cv::SURF const & inst, ::cv::Mat const & img, ::cv::Mat const & mask, bp::list & keypoints, bool useProvidedKeypoints=false ){
    std::vector<float, std::allocator<float> > descriptors2;
    cv::Mat descriptors3;
    std::vector<cv::KeyPoint, std::allocator<cv::KeyPoint> > keypoints2;
    convert_from_object_to_T(keypoints, keypoints2);
    inst.operator()(img, mask, keypoints2, descriptors2, useProvidedKeypoints);
    convert_from_vector_of_T_to_Mat(descriptors2, descriptors3);
    convert_from_T_to_object(keypoints2, keypoints);
    return bp::object( descriptors3 );
}

void register_SURF_class(){

    { //::cv::SURF
        typedef bp::class_< cv::SURF, bp::bases< CvSURFParams > > SURF_exposer_t;
        SURF_exposer_t SURF_exposer = SURF_exposer_t( "SURF", bp::init< >() );
        bp::scope SURF_scope( SURF_exposer );
        SURF_exposer.add_property( "this", pyplus_conv::make_addressof_inst_getter< cv::SURF >() );
        SURF_exposer.def( bp::init< double, bp::optional< int, int, bool > >(( bp::arg("_hessianThreshold"), bp::arg("_nOctaves")=(int)(4), bp::arg("_nOctaveLayers")=(int)(2), bp::arg("_extended")=(bool)(false) )) );
        bp::implicitly_convertible< double, cv::SURF >();
        { //::cv::SURF::descriptorSize
        
            typedef int ( ::cv::SURF::*descriptorSize_function_type )(  ) const;
            
            SURF_exposer.def( 
                "descriptorSize"
                , descriptorSize_function_type( &::cv::SURF::descriptorSize ) );
        
        }
        { //::cv::SURF::operator()
        
            typedef boost::python::object ( *__call___function_type )( ::cv::SURF const &,::cv::Mat const &,::cv::Mat const & );
            
            SURF_exposer.def( 
                "__call__"
                , __call___function_type( &__call___8fbaf2f3b7cf23fdd67db0f4874c6b20 )
                , ( bp::arg("inst"), bp::arg("img"), bp::arg("mask") )
                , "\nWrapped function:"
    "\n    operator()"
    "\nArgument 'keypoints':"\
    "\n    C/C++ type: ::std::vector< cv::KeyPoint > &."\
    "\n    Python type: list."\
    "\n    To convert a Mat into a list, invoke one of Mat's member functions "\
    "\n    to_list_of_...()."\
    "\n    Output argument: omitted from the function's calling sequence, and is "\
    "\n    returned along with the function's return value (if any)." );
        
        }
        { //::cv::SURF::operator()
        
            typedef boost::python::object ( *__call___function_type )( ::cv::SURF const &,::cv::Mat const &,::cv::Mat const &,bp::list &,bool );
            
            SURF_exposer.def( 
                "__call__"
                , __call___function_type( &__call___8904ace00c2f24b8eb00d3aa8ac85014 )
                , ( bp::arg("inst"), bp::arg("img"), bp::arg("mask"), bp::arg("keypoints"), bp::arg("useProvidedKeypoints")=(bool)(false) )
                , "\nWrapped function:"
    "\n    operator()"
    "\nArgument 'descriptors':"\
    "\n    C/C++ type: ::std::vector< float > &."\
    "\n    Python type: Mat."\
    "\n    Invoke asMat() to convert a 1D Python sequence into a Mat, e.g. "\
    "\n    asMat([0,1,2]) or asMat((0,1,2))."\
    "\n    Output argument: omitted from the function's calling sequence, and is "\
    "\n    returned along with the function's return value (if any)."\
    "\nArgument 'keypoints':"\
    "\n    C/C++ type: ::std::vector< cv::KeyPoint > &."\
    "\n    Python type: list."\
    "\n    To convert a Mat into a list, invoke one of Mat's member functions "\
    "\n    to_list_of_...()." );
        
        }
    }

}
