I'm implementing a simple bag-of-words matching system, where I have 10,100 "clusters" and I am trying to match a single feature vector to the closest cluster. This works for a smaller number of clusters, but I need it to work for this larger set.
Essentially, I put all 10,100 clusters into a vector of cv::Mat
objects, each of which is 1 x 16
. Then, I add these to the BFMatcher as follows:
cv::BFMatcher matcher(cv::NORM_HAMMING);
bf_matcher.add(clusters_for_matching);
Finally, given a new 1 x 16
feature vector to match, I do the following:
std::vector<cv::DMatch> matches;
bf_matcher.match(feature_vector, matches);
The error I get is the following:
OpenCV Error: Assertion failed ((int64)imgCount*IMGIDX_ONE < INT_MAX) in unknown function, file ......\src\opencv\modules\features2d\src\matchers.cpp, line 360
My question is simple, what is going on and how can I make this work? It's pretty clear that for some reason it considers 10,100 to be too many training instances, but that is extremely small in comparison to some other applications.