Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Tetragramm
GitHub Repository: Tetragramm/opencv
Path: blob/master/modules/flann/misc/python/pyopencv_flann.hpp
16358 views
1
#ifdef HAVE_OPENCV_FLANN
2
typedef cvflann::flann_distance_t cvflann_flann_distance_t;
3
typedef cvflann::flann_algorithm_t cvflann_flann_algorithm_t;
4
5
template<>
6
PyObject* pyopencv_from(const cvflann_flann_algorithm_t& value)
7
{
8
return PyInt_FromLong(int(value));
9
}
10
11
template<>
12
PyObject* pyopencv_from(const cvflann_flann_distance_t& value)
13
{
14
return PyInt_FromLong(int(value));
15
}
16
17
template<>
18
bool pyopencv_to(PyObject *o, cv::flann::IndexParams& p, const char *name)
19
{
20
CV_UNUSED(name);
21
bool ok = true;
22
PyObject* key = NULL;
23
PyObject* item = NULL;
24
Py_ssize_t pos = 0;
25
26
if (!o || o == Py_None)
27
return true;
28
29
if(PyDict_Check(o)) {
30
while(PyDict_Next(o, &pos, &key, &item)) {
31
if( !PyString_Check(key) ) {
32
ok = false;
33
break;
34
}
35
36
String k = PyString_AsString(key);
37
if( PyString_Check(item) )
38
{
39
const char* value = PyString_AsString(item);
40
p.setString(k, value);
41
}
42
else if( !!PyBool_Check(item) )
43
p.setBool(k, item == Py_True);
44
else if( PyInt_Check(item) )
45
{
46
int value = (int)PyInt_AsLong(item);
47
if( strcmp(k.c_str(), "algorithm") == 0 )
48
p.setAlgorithm(value);
49
else
50
p.setInt(k, value);
51
}
52
else if( PyFloat_Check(item) )
53
{
54
double value = PyFloat_AsDouble(item);
55
p.setDouble(k, value);
56
}
57
else
58
{
59
ok = false;
60
break;
61
}
62
}
63
}
64
65
return ok && !PyErr_Occurred();
66
}
67
68
template<>
69
bool pyopencv_to(PyObject* obj, cv::flann::SearchParams & value, const char * name)
70
{
71
return pyopencv_to<cv::flann::IndexParams>(obj, value, name);
72
}
73
74
template<>
75
bool pyopencv_to(PyObject *o, cvflann::flann_distance_t& dist, const char *name)
76
{
77
int d = (int)dist;
78
bool ok = pyopencv_to(o, d, name);
79
dist = (cvflann::flann_distance_t)d;
80
return ok;
81
}
82
#endif
83