提交 89434411 编写于 作者: H Hamdi Sahloul

resolves #10548 - `FLANN::knnSearch` garbage bug (when kNN is larger than the dataset size)

上级 004a1cd6
...@@ -482,6 +482,9 @@ void runKnnSearch_(void* index, const Mat& query, Mat& indices, Mat& dists, ...@@ -482,6 +482,9 @@ void runKnnSearch_(void* index, const Mat& query, Mat& indices, Mat& dists,
typedef typename Distance::ResultType DistanceType; typedef typename Distance::ResultType DistanceType;
int type = DataType<ElementType>::type; int type = DataType<ElementType>::type;
int dtype = DataType<DistanceType>::type; int dtype = DataType<DistanceType>::type;
IndexType* index_ = (IndexType*)index;
CV_Assert((size_t)knn <= index_->size());
CV_Assert(query.type() == type && indices.type() == CV_32S && dists.type() == dtype); CV_Assert(query.type() == type && indices.type() == CV_32S && dists.type() == dtype);
CV_Assert(query.isContinuous() && indices.isContinuous() && dists.isContinuous()); CV_Assert(query.isContinuous() && indices.isContinuous() && dists.isContinuous());
...@@ -489,8 +492,8 @@ void runKnnSearch_(void* index, const Mat& query, Mat& indices, Mat& dists, ...@@ -489,8 +492,8 @@ void runKnnSearch_(void* index, const Mat& query, Mat& indices, Mat& dists,
::cvflann::Matrix<int> _indices(indices.ptr<int>(), indices.rows, indices.cols); ::cvflann::Matrix<int> _indices(indices.ptr<int>(), indices.rows, indices.cols);
::cvflann::Matrix<DistanceType> _dists(dists.ptr<DistanceType>(), dists.rows, dists.cols); ::cvflann::Matrix<DistanceType> _dists(dists.ptr<DistanceType>(), dists.rows, dists.cols);
((IndexType*)index)->knnSearch(_query, _indices, _dists, knn, index_->knnSearch(_query, _indices, _dists, knn,
(const ::cvflann::SearchParams&)get_params(params)); (const ::cvflann::SearchParams&)get_params(params));
} }
template<typename Distance> template<typename Distance>
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册