FT.output_type1('neighbors'), FT.output_type1('dist') ]) t._transformer_kwds['alias'] = 'findNearest' # findOrthoRange z.mem_fun('findOrthoRange')._transformer_creators.extend([ FT.input_array1d('minBounds'), FT.input_array1d('maxBounds'), FT.output_type1('neighborsIdx'), FT.output_type1('neighbors') ]) # getPoints for t in z.mem_funs('getPoints'): if t.arguments[0].name == 'idx': t._transformer_creators.append(FT.input_array1d('idx', 'nidx')) t._transformer_creators.append(FT.arg_output('pts')) t._transformer_kwds['alias'] = 'getPoints' # getPoint z.mem_fun('getPoint').exclude() # get_support_vector z.add_declaration_code(''' sdcpp::ndarray KDTree_getPoint(bp::object const &bpinst, int i) { cv::KDTree const &inst = bp::extract<cv::KDTree const &>(bpinst); sdcpp::ndarray result = sdcpp::new_ndarray1d(inst.points.cols, NPY_FLOAT, (void *)inst.getPoint(i)); bp::objects::make_nurse_and_patient(result.get_obj().ptr(), bpinst.ptr()); return result; } ''') z.mem_fun('getPoint').exclude() z.add_registration_code(
flanns.include() if flanns[0].decl_string == '::flann::Index': flann_Index = flanns[0] cvflann_Index = flanns[1] else: flann_Index = flanns[1] cvflann_Index = flanns[0] flann_Index.rename('flann_Index') sb.init_class(cvflann_Index) for t in ('knnSearch', 'radiusSearch'): for z in cvflann_Index.mem_funs(t): z._transformer_kwds['alias'] = t z = cvflann_Index.mem_fun( lambda x: x.name == t and 'vector' in x.decl_string) z._transformer_creators.append(FT.arg_output('indices')) z._transformer_creators.append(FT.arg_output('dists')) sb.finalize_class(cvflann_Index) # IndexParams sb.mb.class_('IndexParams').include() # IndexFactory classes for name in ( 'IndexFactory', 'LinearIndexParams', 'KDTreeIndexParams', 'KMeansIndexParams', 'CompositeIndexParams', 'AutotunedIndexParams', 'SavedIndexParams',
for z in ( 'namedWindow', 'imshow', 'imread', 'imwrite', 'imencode', 'imdecode', 'waitKey', 'setWindowProperty', 'getWindowProperty', 'getTrackbarPos', 'setTrackbarPos', ): sb.mb.free_fun(z).include() sb.mb.free_fun('imencode')._transformer_creators.append(FT.arg_output('buf')) # createTrackbar z = sb.mb.free_fun('createTrackbar') FT.expose_func(z, return_pointee=False, transformer_creators=[ FT.trackbar_callback2_func('onChange', 'userdata'), FT.from_address('value') ]) FT.add_underscore(z) sb.cc.write(''' def createTrackbar(trackbar_name, window_name, value, count, on_change=None, userdata=None): if not isinstance(value, _CT.c_int): value = _CT.c_int(value)
# CvFuzzyController # TODO: fix the rest of the member declarations z = sb.mb.class_('CvFuzzyController') z.include() z.decls().exclude() # CvFuzzyMeanShiftTracker # TODO: fix the rest of the member declarations z = sb.mb.class_('CvFuzzyMeanShiftTracker') z.include() z.decls().exclude() # Octree z = sb.mb.class_('Octree') sb.init_class(z) z.mem_fun('getPointsWithinSphere')._transformer_creators.append(FT.arg_output('points')) sb.finalize_class(z) # Octree::Node z = z.class_('Node') sb.init_class(z) sb.finalize_class(z) sb.expose_class_vector('cv::Octree::Node', 'vector_Octree_Node') # Mesh3D z = sb.mb.class_('Mesh3D') sb.init_class(z) sb.finalize_class(z) # SpinImageModel z = sb.mb.class_('SpinImageModel')
flanns = sb.mb.classes('Index') flanns.include() if flanns[0].decl_string == '::flann::Index': flann_Index = flanns[0] cvflann_Index = flanns[1] else: flann_Index = flanns[1] cvflann_Index = flanns[0] flann_Index.rename('flann_Index') sb.init_class(cvflann_Index) for t in ('knnSearch', 'radiusSearch'): for z in cvflann_Index.mem_funs(t): z._transformer_kwds['alias'] = t z = cvflann_Index.mem_fun(lambda x: x.name==t and 'vector' in x.decl_string) z._transformer_creators.append(FT.arg_output('indices')) z._transformer_creators.append(FT.arg_output('dists')) sb.finalize_class(cvflann_Index) # IndexParams sb.mb.class_('IndexParams').include() # IndexFactory classes for name in ( 'IndexFactory', 'LinearIndexParams', 'KDTreeIndexParams', 'KMeansIndexParams', 'CompositeIndexParams', 'AutotunedIndexParams', 'SavedIndexParams', ): z = sb.mb.class_(name) sb.init_class(z) FT.expose_func(z.mem_fun('createIndex'))
# TODO: fix the rest of the member declarations z = sb.mb.class_('CvFuzzyController') z.include() z.decls().exclude() # CvFuzzyMeanShiftTracker # TODO: fix the rest of the member declarations z = sb.mb.class_('CvFuzzyMeanShiftTracker') z.include() z.decls().exclude() # Octree z = sb.mb.class_('Octree') sb.init_class(z) z.mem_fun('getPointsWithinSphere')._transformer_creators.append( FT.arg_output('points')) sb.finalize_class(z) # Octree::Node z = z.class_('Node') sb.init_class(z) sb.finalize_class(z) sb.expose_class_vector('cv::Octree::Node', 'vector_Octree_Node') # Mesh3D z = sb.mb.class_('Mesh3D') sb.init_class(z) sb.finalize_class(z) # SpinImageModel z = sb.mb.class_('SpinImageModel')
# findNearest for t in z.mem_funs('findNearest'): if not 'vector' in t.partial_decl_string: t.exclude() t._transformer_creators.extend([FT.input_array1d('vec'), FT.output_type1('neighborsIdx'), FT.output_type1('neighbors'), FT.output_type1('dist')]) t._transformer_kwds['alias'] = 'findNearest' # findOrthoRange z.mem_fun('findOrthoRange')._transformer_creators.extend([ FT.input_array1d('minBounds'), FT.input_array1d('maxBounds'), FT.output_type1('neighborsIdx'), FT.output_type1('neighbors')]) # getPoints for t in z.mem_funs('getPoints'): if t.arguments[0].name=='idx': t._transformer_creators.append(FT.input_array1d('idx', 'nidx')) t._transformer_creators.append(FT.arg_output('pts')) t._transformer_kwds['alias'] = 'getPoints' # getPoint z.mem_fun('getPoint').exclude() # get_support_vector z.add_declaration_code(''' sdcpp::ndarray KDTree_getPoint(bp::object const &bpinst, int i) { cv::KDTree const &inst = bp::extract<cv::KDTree const &>(bpinst); sdcpp::ndarray result = sdcpp::new_ndarray1d(inst.points.cols, NPY_FLOAT, (void *)inst.getPoint(i)); bp::objects::make_nurse_and_patient(result.get_obj().ptr(), bpinst.ptr()); return result; } ''') z.mem_fun('getPoint').exclude() z.add_registration_code('def( "getPoint", &KDTree_getPoint, (bp::arg("ptidx")) )')
z = sb.mb.class_('KalmanFilter') z.include() for t in ('predict', 'correct'): z.mem_fun(t).call_policies = CP.return_self() # FeatureEvaluator z = sb.mb.class_('FeatureEvaluator') sb.init_class(z) sb.finalize_class(z) sb.expose_class_Ptr('FeatureEvaluator', 'cv') # CascadeClassifier z = sb.mb.class_('CascadeClassifier') sb.init_class(z) z.mem_fun('detectMultiScale')._transformer_creators.append( FT.arg_output('objects')) sb.register_ti('CvHaarClassifierCascade') sb.expose_class_Ptr('CvHaarClassifierCascade') # modify runAt() and setImage() -- I need them able to support old cascade z.mem_fun('runAt').exclude() z.mem_fun('setImage').exclude() z.add_wrapper_code(''' cv::Mat sum, tilted, sqsum; CvMat _sum, _sqsum, _tilted; int my_runAt( cv::Ptr<cv::FeatureEvaluator> &_feval, const cv::Point &pt ) { if( !oldCascade.empty() ) return cvRunHaarClassifierCascade(oldCascade, pt, 0);
# KalmanFilter z = sb.mb.class_('KalmanFilter') z.include() for t in ('predict', 'correct'): z.mem_fun(t).call_policies = CP.return_self() # FeatureEvaluator z = sb.mb.class_('FeatureEvaluator') sb.init_class(z) sb.finalize_class(z) sb.expose_class_Ptr('FeatureEvaluator', 'cv') # CascadeClassifier z = sb.mb.class_('CascadeClassifier') sb.init_class(z) z.mem_fun('detectMultiScale')._transformer_creators.append(FT.arg_output('objects')) sb.register_ti('CvHaarClassifierCascade') sb.expose_class_Ptr('CvHaarClassifierCascade') # modify runAt() and setImage() -- I need them able to support old cascade z.mem_fun('runAt').exclude() z.mem_fun('setImage').exclude() z.add_wrapper_code(''' cv::Mat sum, tilted, sqsum; CvMat _sum, _sqsum, _tilted; int my_runAt( cv::Ptr<cv::FeatureEvaluator> &_feval, const cv::Point &pt ) { if( !oldCascade.empty() ) return cvRunHaarClassifierCascade(oldCascade, pt, 0);
# Basic GUI functions sb.cc.write(''' #----------------------------------------------------------------------------- # C++ Interface #----------------------------------------------------------------------------- ''') # functions for z in ( 'namedWindow', 'imshow', 'imread', 'imwrite', 'imencode', 'imdecode', 'waitKey', 'setWindowProperty', 'getWindowProperty', 'getTrackbarPos', 'setTrackbarPos', ): sb.mb.free_fun(z).include() sb.mb.free_fun('imencode')._transformer_creators.append(FT.arg_output('buf')) # createTrackbar z = sb.mb.free_fun('createTrackbar') FT.expose_func(z, return_pointee=False, transformer_creators=[ FT.trackbar_callback2_func('onChange', 'userdata'), FT.from_address('value')]) FT.add_underscore(z) sb.cc.write(''' def createTrackbar(trackbar_name, window_name, value, count, on_change=None, userdata=None): if not isinstance(value, _CT.c_int): value = _CT.c_int(value) result, z = _ext._createTrackbar(trackbar_name, window_name, _CT.addressof(value), count, on_change, userdata=userdata) if result: cb_key = 'tracker-' + trackbar_name _windows_callbacks.setdefault(window_name,{})[cb_key] = z