From fe09c79f4be25de0ab7917296fc50aa36e7de747 Mon Sep 17 00:00:00 2001
From: Pierre-Emmanuel Viel
Date: Tue, 16 Jun 2020 16:51:41 +0200
Subject: [PATCH] Fix the 'cvflann::anyimpl::bad_any_cast' error using Lsh
---
.../flann/include/opencv2/flann/lsh_index.h | 22 +++++++++----------
1 file changed, 11 insertions(+), 11 deletions(-)
diff --git a/modules/flann/include/opencv2/flann/lsh_index.h b/modules/flann/include/opencv2/flann/lsh_index.h
index ee620dae3e..2a1f1dea20 100644
--- a/modules/flann/include/opencv2/flann/lsh_index.h
+++ b/modules/flann/include/opencv2/flann/lsh_index.h
@@ -60,13 +60,13 @@ struct LshIndexParams : public IndexParams
{
LshIndexParams(unsigned int table_number = 12, unsigned int key_size = 20, unsigned int multi_probe_level = 2)
{
- (* this)["algorithm"] = FLANN_INDEX_LSH;
+ (*this)["algorithm"] = FLANN_INDEX_LSH;
// The number of hash tables to use
- (*this)["table_number"] = table_number;
+ (*this)["table_number"] = static_cast(table_number);
// The length of the key in the hash tables
- (*this)["key_size"] = key_size;
+ (*this)["key_size"] = static_cast(key_size);
// Number of levels to use in multi-probe (0 for standard LSH)
- (*this)["multi_probe_level"] = multi_probe_level;
+ (*this)["multi_probe_level"] = static_cast(multi_probe_level);
}
};
@@ -94,9 +94,9 @@ public:
{
// cv::flann::IndexParams sets integer params as 'int', so it is used with get_param
// in place of 'unsigned int'
- table_number_ = (unsigned int)get_param(index_params_,"table_number",12);
- key_size_ = (unsigned int)get_param(index_params_,"key_size",20);
- multi_probe_level_ = (unsigned int)get_param(index_params_,"multi_probe_level",2);
+ table_number_ = get_param(index_params_,"table_number",12);
+ key_size_ = get_param(index_params_,"key_size",20);
+ multi_probe_level_ = get_param(index_params_,"multi_probe_level",2);
feature_size_ = (unsigned)dataset_.cols;
fill_xor_mask(0, key_size_, multi_probe_level_, xor_masks_);
@@ -112,7 +112,7 @@ public:
void buildIndex() CV_OVERRIDE
{
tables_.resize(table_number_);
- for (unsigned int i = 0; i < table_number_; ++i) {
+ for (int i = 0; i < table_number_; ++i) {
lsh::LshTable& table = tables_[i];
table = lsh::LshTable(feature_size_, key_size_);
@@ -378,11 +378,11 @@ private:
IndexParams index_params_;
/** table number */
- unsigned int table_number_;
+ int table_number_;
/** key size */
- unsigned int key_size_;
+ int key_size_;
/** How far should we look for neighbors in multi-probe LSH */
- unsigned int multi_probe_level_;
+ int multi_probe_level_;
/** The XOR masks to apply to a key to get the neighboring buckets */
std::vector xor_masks_;