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

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

namespace bp = boost::python;

static boost::python::sequence call1( ::cv::SURF const & inst, ::cv::Mat const & img, ::cv::Mat const & mask ){
    std::vector<cv::KeyPoint, std::allocator<cv::KeyPoint> > keypoints2;
    inst.operator()(img, mask, keypoints2);
    return convert_vector_to_seq(keypoints2);
}

static boost::python::tuple call2( ::cv::SURF const & inst, ::cv::Mat const & img, ::cv::Mat const & mask, bp::sequence keypoints, bool useProvidedKeypoints=false ){
    std::vector<cv::KeyPoint, std::allocator<cv::KeyPoint> > keypoints2;
    std::vector<float, std::allocator<float> > descriptors2;
    convert_seq_to_vector(keypoints, keypoints2);
    inst.operator()(img, mask, keypoints2, descriptors2, useProvidedKeypoints);
    keypoints = convert_vector_to_seq(keypoints2);
    return bp::make_tuple( keypoints, convert_vector_to_seq(descriptors2) );
}

void register_SURF_class(){

    bp::class_< cv::SURF, bp::bases< CvSURFParams > >( "SURF", bp::init< >() )    
        .add_property( "this", pyplus_conv::make_addressof_inst_getter< cv::SURF >() )    
        .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) )) )    
        .def( 
            "descriptorSize"
            , (int ( ::cv::SURF::* )(  ) const)( &::cv::SURF::descriptorSize ) )    
        .def( 
            "__call__"
            , (bp::sequence (*)( ::cv::SURF const &,::cv::Mat const &,::cv::Mat const & ))( &call1 )
            , ( bp::arg("inst"), bp::arg("img"), bp::arg("mask") ) )    
        .def( 
            "__call__"
            , (bp::tuple (*)( ::cv::SURF const &,::cv::Mat const &,::cv::Mat const &,bp::sequence,bool ))( &call2 )
            , ( bp::arg("inst"), bp::arg("img"), bp::arg("mask"), bp::arg("keypoints"), bp::arg("useProvidedKeypoints")=(bool)(false) ) );

}
