Packages
evision
0.1.28
1.0.1-rc.0
1.0.0
1.0.0-rc.0
0.2.17
0.2.17-rc2
0.2.17-rc1
0.2.16
0.2.16-pre.2
0.2.16-pre
0.2.15
0.2.14
0.2.13
0.2.12
0.2.11
0.2.9
0.2.8
0.2.7
0.2.6
0.2.5
0.2.4
0.2.3
0.2.2
0.2.2-rc2
0.2.1
0.2.0
0.1.39
0.1.38
0.1.37
0.1.36
0.1.35
0.1.34
0.1.33
0.1.32
retired
0.1.31
0.1.30
0.1.29
0.1.28
0.1.27
0.1.26
0.1.26-rc3
0.1.26-rc2
0.1.26-rc1
0.1.26-rc0
0.1.25
0.1.24
0.1.23
0.1.22
0.1.21
0.1.20
0.1.19
0.1.18
0.1.17
0.1.16
0.1.15
0.1.14
0.1.13
0.1.12
0.1.11
0.1.10
0.1.9
0.1.8
0.1.7
OpenCV-Erlang/Elixir binding.
Current section
Files
Jump to
Current section
Files
c_src/evision_custom_headers/evision_flann.hpp
#ifdef HAVE_OPENCV_FLANN
typedef cvflann::flann_distance_t cvflann_flann_distance_t;
typedef cvflann::flann_algorithm_t cvflann_flann_algorithm_t;
template<>
ERL_NIF_TERM evision_from(ErlNifEnv *env, const cvflann_flann_algorithm_t& value)
{
return enif_make_int(env, int(value));
}
template<>
ERL_NIF_TERM evision_from(ErlNifEnv *env, const cvflann_flann_distance_t& value)
{
return enif_make_int(env, int(value));
}
template<>
bool evision_to(ErlNifEnv *env, ERL_NIF_TERM o, cv::flann::IndexParams& p, const ArgInfo& info)
{
CV_UNUSED(info);
bool ok = true;
ERL_NIF_TERM key;
ERL_NIF_TERM value;
if(enif_is_map(env, o)) {
ErlNifMapIterator iter;
enif_map_iterator_create(env, o, &iter, ERL_NIF_MAP_ITERATOR_FIRST);
while(enif_map_iterator_get_pair(env, &iter, &key, &value))
{
// get key
std::string k;
if (!evision::nif::get(env, key, k))
{
ok = false;
break;
}
// get value
bool val;
int i32;
double f64;
if( evision::nif::get(env, value, &val) )
{
p.setBool(k, val);
}
else if( enif_get_int(env, value, &i32) )
{
if( strcmp(k.c_str(), "algorithm") == 0 )
p.setAlgorithm(i32);
else
p.setInt(k, i32);
}
else if( enif_get_double(env, value, &f64) )
{
p.setDouble(k, f64);
}
else
{
std::string val_str;
if (!evision::nif::get(env, value, val_str))
{
ok = false;
break;
}
p.setString(k, val_str);
}
enif_map_iterator_next(env, &iter);
}
enif_map_iterator_destroy(env, &iter);
}
return ok;
}
template<>
bool evision_to(ErlNifEnv *env, ERL_NIF_TERM obj, cv::flann::SearchParams & value, const ArgInfo& info)
{
return evision_to<cv::flann::IndexParams>(env, obj, value, info);
}
template<>
bool evision_to(ErlNifEnv *env, ERL_NIF_TERM o, cvflann::flann_distance_t& dist, const ArgInfo& info)
{
int d = (int)dist;
bool ok = evision_to(env, o, d, info);
dist = (cvflann::flann_distance_t)d;
return ok;
}
#endif