Path: blob/master/modules/flann/misc/python/pyopencv_flann.hpp
16358 views
#ifdef HAVE_OPENCV_FLANN1typedef cvflann::flann_distance_t cvflann_flann_distance_t;2typedef cvflann::flann_algorithm_t cvflann_flann_algorithm_t;34template<>5PyObject* pyopencv_from(const cvflann_flann_algorithm_t& value)6{7return PyInt_FromLong(int(value));8}910template<>11PyObject* pyopencv_from(const cvflann_flann_distance_t& value)12{13return PyInt_FromLong(int(value));14}1516template<>17bool pyopencv_to(PyObject *o, cv::flann::IndexParams& p, const char *name)18{19CV_UNUSED(name);20bool ok = true;21PyObject* key = NULL;22PyObject* item = NULL;23Py_ssize_t pos = 0;2425if (!o || o == Py_None)26return true;2728if(PyDict_Check(o)) {29while(PyDict_Next(o, &pos, &key, &item)) {30if( !PyString_Check(key) ) {31ok = false;32break;33}3435String k = PyString_AsString(key);36if( PyString_Check(item) )37{38const char* value = PyString_AsString(item);39p.setString(k, value);40}41else if( !!PyBool_Check(item) )42p.setBool(k, item == Py_True);43else if( PyInt_Check(item) )44{45int value = (int)PyInt_AsLong(item);46if( strcmp(k.c_str(), "algorithm") == 0 )47p.setAlgorithm(value);48else49p.setInt(k, value);50}51else if( PyFloat_Check(item) )52{53double value = PyFloat_AsDouble(item);54p.setDouble(k, value);55}56else57{58ok = false;59break;60}61}62}6364return ok && !PyErr_Occurred();65}6667template<>68bool pyopencv_to(PyObject* obj, cv::flann::SearchParams & value, const char * name)69{70return pyopencv_to<cv::flann::IndexParams>(obj, value, name);71}7273template<>74bool pyopencv_to(PyObject *o, cvflann::flann_distance_t& dist, const char *name)75{76int d = (int)dist;77bool ok = pyopencv_to(o, d, name);78dist = (cvflann::flann_distance_t)d;79return ok;80}81#endif8283