From 5b521bb7785456376366ca5558eb0ac7b0c172b8 Mon Sep 17 00:00:00 2001 From: Apoorv Goel <35146783+UnderscoreAsterisk@users.noreply.github.com> Date: Wed, 26 Jun 2019 19:35:11 +0300 Subject: [PATCH] Merge pull request #14898 from UnderscoreAsterisk:flann-warnings-and-4376 Keep a local copy of `features` from `flann::GenericIndex ` constructor (#14898) * Fix warnings on Windows * Fix #4376 --- modules/flann/include/opencv2/flann.hpp | 6 ++++-- modules/flann/include/opencv2/flann/dist.h | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/modules/flann/include/opencv2/flann.hpp b/modules/flann/include/opencv2/flann.hpp index fec3d067c8..050b5f7f58 100644 --- a/modules/flann/include/opencv2/flann.hpp +++ b/modules/flann/include/opencv2/flann.hpp @@ -289,7 +289,7 @@ public: int veclen() const { return nnIndex->veclen(); } - int size() const { return nnIndex->size(); } + int size() const { return (int)nnIndex->size(); } ::cvflann::IndexParams getParameters() { return nnIndex->getParameters(); } @@ -297,6 +297,7 @@ public: private: ::cvflann::Index* nnIndex; + Mat _dataset; }; //! @cond IGNORED @@ -312,10 +313,11 @@ private: template GenericIndex::GenericIndex(const Mat& dataset, const ::cvflann::IndexParams& params, Distance distance) +: _dataset(dataset) { CV_Assert(dataset.type() == CvType::type()); CV_Assert(dataset.isContinuous()); - ::cvflann::Matrix m_dataset((ElementType*)dataset.ptr(0), dataset.rows, dataset.cols); + ::cvflann::Matrix m_dataset((ElementType*)_dataset.ptr(0), _dataset.rows, _dataset.cols); nnIndex = new ::cvflann::Index(m_dataset, params, distance); diff --git a/modules/flann/include/opencv2/flann/dist.h b/modules/flann/include/opencv2/flann/dist.h index 2bb4fc947a..0670122c16 100644 --- a/modules/flann/include/opencv2/flann/dist.h +++ b/modules/flann/include/opencv2/flann/dist.h @@ -114,7 +114,7 @@ struct L2_Simple ResultType result = ResultType(); ResultType diff; for(size_t i = 0; i < size; ++i ) { - diff = *a++ - *b++; + diff = (ResultType)(*a++ - *b++); result += diff*diff; } return result;