mirror of
https://github.com/opencv/opencv.git
synced 2025-07-31 09:57:28 +08:00
Merge pull request #17640 from pemmanuelviel:pev--fix-lsh-bad-any-cast
This commit is contained in:
commit
a84afb6334
@ -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<int>(table_number);
|
||||
// The length of the key in the hash tables
|
||||
(*this)["key_size"] = key_size;
|
||||
(*this)["key_size"] = static_cast<int>(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<int>(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<int>(index_params_,"table_number",12);
|
||||
key_size_ = (unsigned int)get_param<int>(index_params_,"key_size",20);
|
||||
multi_probe_level_ = (unsigned int)get_param<int>(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<ElementType>& table = tables_[i];
|
||||
table = lsh::LshTable<ElementType>(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<lsh::BucketKey> xor_masks_;
|
||||
|
@ -90,4 +90,10 @@ void CV_LshTableBadArgTest::run( int /* start_from */ )
|
||||
|
||||
TEST(Flann_LshTable, badarg) { CV_LshTableBadArgTest test; test.safe_run(); }
|
||||
|
||||
TEST(Flann_LshTable, bad_any_cast) {
|
||||
Mat features = Mat::ones(1, 64, CV_8U);
|
||||
EXPECT_NO_THROW(flann::GenericIndex<cvflann::Hamming2<unsigned char> >(
|
||||
features, cvflann::LshIndexParams()));
|
||||
}
|
||||
|
||||
}} // namespace
|
||||
|
Loading…
Reference in New Issue
Block a user