diff --git a/modules/features2d/doc/common_interfaces_of_descriptor_matchers.rst b/modules/features2d/doc/common_interfaces_of_descriptor_matchers.rst index 9350f6f5cd..295cc83810 100644 --- a/modules/features2d/doc/common_interfaces_of_descriptor_matchers.rst +++ b/modules/features2d/doc/common_interfaces_of_descriptor_matchers.rst @@ -28,7 +28,7 @@ with an image set. :: public: virtual ~DescriptorMatcher(); - virtual void add( InputArray descriptors ); + virtual void add( InputArrayOfArrays descriptors ); const vector& getTrainDescriptors() const; virtual void clear(); @@ -44,20 +44,20 @@ with an image set. :: vector& matches, InputArray mask=noArray() ) const; void knnMatch( InputArray queryDescriptors, InputArray trainDescriptors, vector >& matches, int k, - InputArray mask=Mat(), bool compactResult=false ) const; + InputArray mask=noArray(), bool compactResult=false ) const; void radiusMatch( InputArray queryDescriptors, InputArray trainDescriptors, vector >& matches, float maxDistance, - InputArray mask=Mat(), bool compactResult=false ) const; + InputArray mask=noArray(), bool compactResult=false ) const; /* * Group of methods to match descriptors from one image to an image set. */ void match( InputArray queryDescriptors, vector& matches, - const vector& masks=noArray() ); + InputArrayOfArrays masks=noArray() ); void knnMatch( InputArray queryDescriptors, vector >& matches, - int k, const vector& masks=vector(), + int k, InputArrayOfArrays masks=noArray(), bool compactResult=false ); void radiusMatch( InputArray queryDescriptors, vector >& matches, - float maxDistance, const vector& masks=vector(), + float maxDistance, InputArrayOfArrays masks=noArray(), bool compactResult=false ); virtual void read( const FileNode& ); @@ -133,7 +133,7 @@ Finds the best match for each descriptor from a query set. .. ocv:function:: void DescriptorMatcher::match( InputArray queryDescriptors, InputArray trainDescriptors, vector& matches, InputArray mask=noArray() ) const -.. ocv:function:: void DescriptorMatcher::match(InputArray queryDescriptors, vector& matches, const vector& masks=vector() ) +.. ocv:function:: void DescriptorMatcher::match(InputArray queryDescriptors, vector& matches, InputArrayOfArrays masks=noArray() ) :param queryDescriptors: Query set of descriptors. @@ -155,7 +155,7 @@ Finds the k best matches for each descriptor from a query set. .. ocv:function:: void DescriptorMatcher::knnMatch(InputArray queryDescriptors, InputArray trainDescriptors, vector >& matches, int k, InputArray mask=noArray(), bool compactResult=false ) const -.. ocv:function:: void DescriptorMatcher::knnMatch( InputArray queryDescriptors, vector >& matches, int k, const vector& masks=vector(), bool compactResult=false ) +.. ocv:function:: void DescriptorMatcher::knnMatch( InputArray queryDescriptors, vector >& matches, int k, InputArrayOfArrays masks=noArray(), bool compactResult=false ) :param queryDescriptors: Query set of descriptors. @@ -181,7 +181,7 @@ For each query descriptor, finds the training descriptors not farther than the s .. ocv:function:: void DescriptorMatcher::radiusMatch( InputArray queryDescriptors, InputArray trainDescriptors, vector >& matches, float maxDistance, InputArray mask=noArray(), bool compactResult=false ) const -.. ocv:function:: void DescriptorMatcher::radiusMatch( InputArray queryDescriptors, vector >& matches, float maxDistance, const vector& masks=vector(), bool compactResult=false ) +.. ocv:function:: void DescriptorMatcher::radiusMatch( InputArray queryDescriptors, vector >& matches, float maxDistance, InputArrayOfArrays masks=noArray(), bool compactResult=false ) :param queryDescriptors: Query set of descriptors. @@ -265,7 +265,7 @@ Flann-based descriptor matcher. This matcher trains :ocv:class:`flann::Index_` o const Ptr& indexParams=new flann::KDTreeIndexParams(), const Ptr& searchParams=new flann::SearchParams() ); - virtual void add( const vector& descriptors ); + virtual void add( InputArrayOfArrays descriptors ); virtual void clear(); virtual void train(); diff --git a/modules/features2d/doc/common_interfaces_of_generic_descriptor_matchers.rst b/modules/features2d/doc/common_interfaces_of_generic_descriptor_matchers.rst index c40a9c7ea9..5806b82285 100644 --- a/modules/features2d/doc/common_interfaces_of_generic_descriptor_matchers.rst +++ b/modules/features2d/doc/common_interfaces_of_generic_descriptor_matchers.rst @@ -52,26 +52,26 @@ Abstract interface for extracting and matching a keypoint descriptor. There are */ void match( InputArray queryImage, vector& queryKeypoints, InputArray trainImage, vector& trainKeypoints, - vector& matches, const Mat& mask=Mat() ) const; + vector& matches, InputArray mask=noArray() ) const; void knnMatch( InputArray queryImage, vector& queryKeypoints, InputArray trainImage, vector& trainKeypoints, vector >& matches, int k, - const Mat& mask=Mat(), bool compactResult=false ) const; + InputArray mask=noArray(), bool compactResult=false ) const; void radiusMatch( InputArray queryImage, vector& queryKeypoints, InputArray trainImage, vector& trainKeypoints, vector >& matches, float maxDistance, - const Mat& mask=Mat(), bool compactResult=false ) const; + InputArray mask=noArray(), bool compactResult=false ) const; /* * Group of methods to match keypoints from one image to an image set. */ void match( InputArray queryImage, vector& queryKeypoints, - vector& matches, const vector& masks=vector() ); + vector& matches, InputArrayOfArrays masks=noArray() ); void knnMatch( InputArray queryImage, vector& queryKeypoints, vector >& matches, int k, - const vector& masks=vector(), bool compactResult=false ); + InputArrayOfArrays masks=noArray(), bool compactResult=false ); void radiusMatch( InputArray queryImage, vector& queryKeypoints, vector >& matches, float maxDistance, - const vector& masks=vector(), bool compactResult=false ); + InputArrayOfArrays masks=noArray(), bool compactResult=false ); virtual void read( const FileNode& ); virtual void write( FileStorage& ) const; @@ -170,9 +170,9 @@ GenericDescriptorMatcher::match ----------------------------------- Finds the best match in the training set for each keypoint from the query set. -.. ocv:function:: void GenericDescriptorMatcher::match(InputArray queryImage, vector& queryKeypoints, InputArray trainImage, vector& trainKeypoints, vector& matches, const Mat& mask=Mat() ) const +.. ocv:function:: void GenericDescriptorMatcher::match(InputArray queryImage, vector& queryKeypoints, InputArray trainImage, vector& trainKeypoints, vector& matches, InputArray mask=noArray() ) const -.. ocv:function:: void GenericDescriptorMatcher::match( InputArray queryImage, vector& queryKeypoints, vector& matches, const vector& masks=vector() ) +.. ocv:function:: void GenericDescriptorMatcher::match( InputArray queryImage, vector& queryKeypoints, vector& matches, InputArrayOfArrays masks=noArray() ) :param queryImage: Query image. @@ -196,9 +196,9 @@ GenericDescriptorMatcher::knnMatch -------------------------------------- Finds the ``k`` best matches for each query keypoint. -.. ocv:function:: void GenericDescriptorMatcher::knnMatch( InputArray queryImage, vector& queryKeypoints, InputArray trainImage, vector& trainKeypoints, vector >& matches, int k, const Mat& mask=Mat(), bool compactResult=false ) const +.. ocv:function:: void GenericDescriptorMatcher::knnMatch( InputArray queryImage, vector& queryKeypoints, InputArray trainImage, vector& trainKeypoints, vector >& matches, int k, InputArray mask=noArray(), bool compactResult=false ) const -.. ocv:function:: void GenericDescriptorMatcher::knnMatch( InputArray queryImage, vector& queryKeypoints, vector >& matches, int k, const vector& masks=vector(), bool compactResult=false ) +.. ocv:function:: void GenericDescriptorMatcher::knnMatch( InputArray queryImage, vector& queryKeypoints, vector >& matches, int k, InputArrayOfArrays masks=noArray(), bool compactResult=false ) The methods are extended variants of ``GenericDescriptorMatch::match``. The parameters are similar, and the semantics is similar to ``DescriptorMatcher::knnMatch``. But this class does not require explicitly computed keypoint descriptors. @@ -208,9 +208,9 @@ GenericDescriptorMatcher::radiusMatch ----------------------------------------- For each query keypoint, finds the training keypoints not farther than the specified distance. -.. ocv:function:: void GenericDescriptorMatcher::radiusMatch( InputArray queryImage, vector& queryKeypoints, InputArray trainImage, vector& trainKeypoints, vector >& matches, float maxDistance, const Mat& mask=Mat(), bool compactResult=false ) const +.. ocv:function:: void GenericDescriptorMatcher::radiusMatch( InputArray queryImage, vector& queryKeypoints, InputArray trainImage, vector& trainKeypoints, vector >& matches, float maxDistance, InputArray mask=noArray(), bool compactResult=false ) const -.. ocv:function:: void GenericDescriptorMatcher::radiusMatch( InputArray queryImage, vector& queryKeypoints, vector >& matches, float maxDistance, const vector& masks=vector(), bool compactResult=false ) +.. ocv:function:: void GenericDescriptorMatcher::radiusMatch( InputArray queryImage, vector& queryKeypoints, vector >& matches, float maxDistance, InputArrayOfArrays masks=noArray(), bool compactResult=false ) The methods are similar to ``DescriptorMatcher::radius``. But this class does not require explicitly computed keypoint descriptors. diff --git a/modules/features2d/include/opencv2/features2d.hpp b/modules/features2d/include/opencv2/features2d.hpp index 341e20ae94..1589d59a87 100644 --- a/modules/features2d/include/opencv2/features2d.hpp +++ b/modules/features2d/include/opencv2/features2d.hpp @@ -465,8 +465,8 @@ public: double _min_margin=0.003, int _edge_blur_size=5 ); //! the operator that extracts the MSERs from the image or the specific part of it - CV_WRAP_AS(detect) void operator()( const Mat& image, CV_OUT std::vector >& msers, - const Mat& mask=Mat() ) const; + CV_WRAP_AS(detect) void operator()( InputArray image, CV_OUT std::vector >& msers, + InputArray mask=noArray() ) const; AlgorithmInfo* info() const; protected: @@ -1053,11 +1053,11 @@ public: * See description of similar methods for matching image pair above. */ CV_WRAP void match( InputArray queryDescriptors, CV_OUT std::vector& matches, - const std::vector& masks=std::vector() ); + InputArrayOfArrays masks=noArray() ); CV_WRAP void knnMatch( InputArray queryDescriptors, CV_OUT std::vector >& matches, int k, - const std::vector& masks=std::vector(), bool compactResult=false ); + InputArrayOfArrays masks=noArray(), bool compactResult=false ); void radiusMatch( InputArray queryDescriptors, std::vector >& matches, float maxDistance, - const std::vector& masks=std::vector(), bool compactResult=false ); + InputArrayOfArrays masks=noArray(), bool compactResult=false ); // Reads matcher object from a file node virtual void read( const FileNode& ); @@ -1106,11 +1106,11 @@ protected: virtual void radiusMatchImpl( InputArray queryDescriptors, std::vector >& matches, float maxDistance, InputArrayOfArrays masks=noArray(), bool compactResult=false ) = 0; - static bool isPossibleMatch( const Mat& mask, int queryIdx, int trainIdx ); - static bool isMaskedOut( const std::vector& masks, int queryIdx ); + static bool isPossibleMatch( InputArray mask, int queryIdx, int trainIdx ); + static bool isMaskedOut( InputArrayOfArrays masks, int queryIdx ); static Mat clone_op( Mat m ) { return m.clone(); } - void checkMasks( const std::vector& masks, int queryDescriptorsCount ) const; + void checkMasks( InputArrayOfArrays masks, int queryDescriptorsCount ) const; // Collection of descriptors from train images. std::vector trainDescCollection; @@ -1157,7 +1157,7 @@ public: CV_WRAP FlannBasedMatcher( const Ptr& indexParams=makePtr(), const Ptr& searchParams=makePtr() ); - virtual void add( const std::vector& descriptors ); + virtual void add( InputArrayOfArrays descriptors ); virtual void clear(); // Reads matcher object from a file node @@ -1256,7 +1256,7 @@ public: // Find one best match for each query descriptor (if mask is empty). void match( InputArray queryImage, std::vector& queryKeypoints, InputArray trainImage, std::vector& trainKeypoints, - std::vector& matches, const Mat& mask=Mat() ) const; + std::vector& matches, InputArray mask=noArray() ) const; // Find k best matches for each query keypoint (in increasing order of distances). // compactResult is used when mask is not empty. If compactResult is false matches // vector will have the same size as queryDescriptors rows. @@ -1264,24 +1264,24 @@ public: void knnMatch( InputArray queryImage, std::vector& queryKeypoints, InputArray trainImage, std::vector& trainKeypoints, std::vector >& matches, int k, - const Mat& mask=Mat(), bool compactResult=false ) const; + InputArray mask=noArray(), bool compactResult=false ) const; // Find best matches for each query descriptor which have distance less than maxDistance (in increasing order of distances). void radiusMatch( InputArray queryImage, std::vector& queryKeypoints, InputArray trainImage, std::vector& trainKeypoints, std::vector >& matches, float maxDistance, - const Mat& mask=Mat(), bool compactResult=false ) const; + InputArray mask=noArray(), bool compactResult=false ) const; /* * Group of methods to match keypoints from one image to image set. * See description of similar methods for matching image pair above. */ void match( InputArray queryImage, std::vector& queryKeypoints, - std::vector& matches, const std::vector& masks=std::vector() ); + std::vector& matches, InputArrayOfArrays masks=noArray() ); void knnMatch( InputArray queryImage, std::vector& queryKeypoints, std::vector >& matches, int k, - const std::vector& masks=std::vector(), bool compactResult=false ); + InputArrayOfArrays masks=noArray(), bool compactResult=false ); void radiusMatch(InputArray queryImage, std::vector& queryKeypoints, std::vector >& matches, float maxDistance, - const std::vector& masks=std::vector(), bool compactResult=false ); + InputArrayOfArrays masks=noArray(), bool compactResult=false ); // Reads matcher object from a file node virtual void read( const FileNode& fn ); @@ -1305,10 +1305,10 @@ protected: // after calling train(). virtual void knnMatchImpl( InputArray queryImage, std::vector& queryKeypoints, std::vector >& matches, int k, - const std::vector& masks, bool compactResult ) = 0; + InputArrayOfArrays masks, bool compactResult ) = 0; virtual void radiusMatchImpl( InputArray queryImage, std::vector& queryKeypoints, std::vector >& matches, float maxDistance, - const std::vector& masks, bool compactResult ) = 0; + InputArrayOfArrays masks, bool compactResult ) = 0; /* * A storage for sets of keypoints together with corresponding images and class IDs */ @@ -1383,10 +1383,10 @@ public: protected: virtual void knnMatchImpl( InputArray queryImage, std::vector& queryKeypoints, std::vector >& matches, int k, - const std::vector& masks, bool compactResult ); + InputArrayOfArrays masks, bool compactResult ); virtual void radiusMatchImpl( InputArray queryImage, std::vector& queryKeypoints, std::vector >& matches, float maxDistance, - const std::vector& masks, bool compactResult ); + InputArrayOfArrays masks, bool compactResult ); Ptr extractor; Ptr matcher; diff --git a/modules/features2d/src/matchers.cpp b/modules/features2d/src/matchers.cpp index 4f97e011d2..6bc925f8a5 100644 --- a/modules/features2d/src/matchers.cpp +++ b/modules/features2d/src/matchers.cpp @@ -791,15 +791,18 @@ void DescriptorMatcher::radiusMatch( InputArray queryDescriptors, InputArray tra tempMatcher->radiusMatch( queryDescriptors, matches, maxDistance, std::vector(1, mask.getMat()), compactResult ); } -void DescriptorMatcher::match( InputArray queryDescriptors, std::vector& matches, const std::vector& masks ) +void DescriptorMatcher::match( InputArray queryDescriptors, std::vector& matches, InputArrayOfArrays masks ) { std::vector > knnMatches; knnMatch( queryDescriptors, knnMatches, 1, masks, true /*compactResult*/ ); convertMatches( knnMatches, matches ); } -void DescriptorMatcher::checkMasks( const std::vector& masks, int queryDescriptorsCount ) const +void DescriptorMatcher::checkMasks( InputArrayOfArrays _masks, int queryDescriptorsCount ) const { + std::vector masks; + _masks.getMatVector(masks); + if( isMaskSupported() && !masks.empty() ) { // Check masks @@ -819,7 +822,7 @@ void DescriptorMatcher::checkMasks( const std::vector& masks, int queryDesc } void DescriptorMatcher::knnMatch( InputArray queryDescriptors, std::vector >& matches, int knn, - const std::vector& masks, bool compactResult ) + InputArrayOfArrays masks, bool compactResult ) { if( empty() || queryDescriptors.empty() ) return; @@ -833,7 +836,7 @@ void DescriptorMatcher::knnMatch( InputArray queryDescriptors, std::vector >& matches, float maxDistance, - const std::vector& masks, bool compactResult ) + InputArrayOfArrays masks, bool compactResult ) { matches.clear(); if( empty() || queryDescriptors.empty() ) @@ -853,13 +856,17 @@ void DescriptorMatcher::read( const FileNode& ) void DescriptorMatcher::write( FileStorage& ) const {} -bool DescriptorMatcher::isPossibleMatch( const Mat& mask, int queryIdx, int trainIdx ) +bool DescriptorMatcher::isPossibleMatch( InputArray _mask, int queryIdx, int trainIdx ) { + Mat mask = _mask.getMat(); return mask.empty() || mask.at(queryIdx, trainIdx); } -bool DescriptorMatcher::isMaskedOut( const std::vector& masks, int queryIdx ) +bool DescriptorMatcher::isMaskedOut( InputArrayOfArrays _masks, int queryIdx ) { + std::vector masks; + _masks.getMatVector(masks); + size_t outCount = 0; for( size_t i = 0; i < masks.size(); i++ ) { @@ -1199,9 +1206,12 @@ FlannBasedMatcher::FlannBasedMatcher( const Ptr& _indexParam CV_Assert( _searchParams ); } -void FlannBasedMatcher::add( const std::vector& descriptors ) +void FlannBasedMatcher::add( InputArrayOfArrays _descriptors ) { - DescriptorMatcher::add( descriptors ); + DescriptorMatcher::add( _descriptors ); + std::vector descriptors; + _descriptors.getMatVector(descriptors); + for( size_t i = 0; i < descriptors.size(); i++ ) { addedDescCount += descriptors[i].rows; @@ -1676,43 +1686,43 @@ void GenericDescriptorMatcher::classify( InputArray queryImage, std::vector& queryKeypoints, InputArray _trainImage, std::vector& trainKeypoints, - std::vector& matches, const Mat& mask ) const + std::vector& matches, InputArray mask ) const { Mat trainImage = _trainImage.getMat(); Ptr tempMatcher = clone( true ); std::vector > vecTrainPoints(1, trainKeypoints); tempMatcher->add( std::vector(1, trainImage), vecTrainPoints ); - tempMatcher->match( queryImage, queryKeypoints, matches, std::vector(1, mask) ); + tempMatcher->match( queryImage, queryKeypoints, matches, std::vector(1, mask.getMat()) ); vecTrainPoints[0].swap( trainKeypoints ); } void GenericDescriptorMatcher::knnMatch( InputArray queryImage, std::vector& queryKeypoints, InputArray _trainImage, std::vector& trainKeypoints, - std::vector >& matches, int knn, const Mat& mask, bool compactResult ) const + std::vector >& matches, int knn, InputArray mask, bool compactResult ) const { Mat trainImage = _trainImage.getMat(); Ptr tempMatcher = clone( true ); std::vector > vecTrainPoints(1, trainKeypoints); tempMatcher->add( std::vector(1, trainImage), vecTrainPoints ); - tempMatcher->knnMatch( queryImage, queryKeypoints, matches, knn, std::vector(1, mask), compactResult ); + tempMatcher->knnMatch( queryImage, queryKeypoints, matches, knn, std::vector(1, mask.getMat()), compactResult ); vecTrainPoints[0].swap( trainKeypoints ); } void GenericDescriptorMatcher::radiusMatch( InputArray queryImage, std::vector& queryKeypoints, InputArray _trainImage, std::vector& trainKeypoints, std::vector >& matches, float maxDistance, - const Mat& mask, bool compactResult ) const + InputArray mask, bool compactResult ) const { Mat trainImage = _trainImage.getMat(); Ptr tempMatcher = clone( true ); std::vector > vecTrainPoints(1, trainKeypoints); tempMatcher->add( std::vector(1, trainImage), vecTrainPoints ); - tempMatcher->radiusMatch( queryImage, queryKeypoints, matches, maxDistance, std::vector(1, mask), compactResult ); + tempMatcher->radiusMatch( queryImage, queryKeypoints, matches, maxDistance, std::vector(1, mask.getMat()), compactResult ); vecTrainPoints[0].swap( trainKeypoints ); } void GenericDescriptorMatcher::match( InputArray queryImage, std::vector& queryKeypoints, - std::vector& matches, const std::vector& masks ) + std::vector& matches, InputArrayOfArrays masks ) { std::vector > knnMatches; knnMatch( queryImage, queryKeypoints, knnMatches, 1, masks, false ); @@ -1721,7 +1731,7 @@ void GenericDescriptorMatcher::match( InputArray queryImage, std::vector& queryKeypoints, std::vector >& matches, int knn, - const std::vector& masks, bool compactResult ) + InputArrayOfArrays masks, bool compactResult ) { matches.clear(); @@ -1737,7 +1747,7 @@ void GenericDescriptorMatcher::knnMatch( InputArray queryImage, std::vector& queryKeypoints, std::vector >& matches, float maxDistance, - const std::vector& masks, bool compactResult ) + InputArrayOfArrays masks, bool compactResult ) { matches.clear(); @@ -1828,7 +1838,7 @@ bool VectorDescriptorMatcher::isMaskSupported() void VectorDescriptorMatcher::knnMatchImpl( InputArray queryImage, std::vector& queryKeypoints, std::vector >& matches, int knn, - const std::vector& masks, bool compactResult ) + InputArrayOfArrays masks, bool compactResult ) { Mat queryDescriptors; extractor->compute( queryImage, queryKeypoints, queryDescriptors ); @@ -1837,7 +1847,7 @@ void VectorDescriptorMatcher::knnMatchImpl( InputArray queryImage, std::vector& queryKeypoints, std::vector >& matches, float maxDistance, - const std::vector& masks, bool compactResult ) + InputArrayOfArrays masks, bool compactResult ) { Mat queryDescriptors; extractor->compute( queryImage, queryKeypoints, queryDescriptors ); diff --git a/modules/features2d/src/mser.cpp b/modules/features2d/src/mser.cpp index 637fc370d7..40c32d0a9e 100644 --- a/modules/features2d/src/mser.cpp +++ b/modules/features2d/src/mser.cpp @@ -1266,11 +1266,11 @@ MSER::MSER( int _delta, int _min_area, int _max_area, { } -void MSER::operator()( const Mat& image, std::vector >& dstcontours, const Mat& mask ) const +void MSER::operator()( InputArray image, std::vector >& dstcontours, InputArray mask ) const { - CvMat _image = image, _mask, *pmask = 0; - if( mask.data ) - pmask = &(_mask = mask); + CvMat _image = image.getMat(), _mask, *pmask = 0; + if( !mask.empty() ) + pmask = &(_mask = mask.getMat()); MemStorage storage(cvCreateMemStorage(0)); Seq contours; extractMSER( &_image, pmask, &contours.seq, storage, diff --git a/modules/legacy/include/opencv2/legacy.hpp b/modules/legacy/include/opencv2/legacy.hpp index e622c27c49..e85bfd24d5 100644 --- a/modules/legacy/include/opencv2/legacy.hpp +++ b/modules/legacy/include/opencv2/legacy.hpp @@ -2674,10 +2674,10 @@ protected: // loaded with DescriptorOneWay::Initialize, kd tree is used for finding minimum distances. virtual void knnMatchImpl( InputArray queryImage, std::vector& queryKeypoints, std::vector >& matches, int k, - const std::vector& masks, bool compactResult ); + InputArrayOfArrays masks, bool compactResult ); virtual void radiusMatchImpl( InputArray queryImage, std::vector& queryKeypoints, std::vector >& matches, float maxDistance, - const std::vector& masks, bool compactResult ); + InputArrayOfArrays masks, bool compactResult ); Ptr base; Params params; @@ -2737,10 +2737,10 @@ public: protected: virtual void knnMatchImpl( InputArray queryImage, std::vector& queryKeypoints, std::vector >& matches, int k, - const std::vector& masks, bool compactResult ); + InputArrayOfArrays masks, bool compactResult ); virtual void radiusMatchImpl( InputArray queryImage, std::vector& queryKeypoints, std::vector >& matches, float maxDistance, - const std::vector& masks, bool compactResult ); + InputArrayOfArrays masks, bool compactResult ); void trainFernClassifier(); void calcBestProbAndMatchIdx( const Mat& image, const Point2f& pt, diff --git a/modules/legacy/src/oneway.cpp b/modules/legacy/src/oneway.cpp index c5a9f4c2c2..09826ae4f6 100644 --- a/modules/legacy/src/oneway.cpp +++ b/modules/legacy/src/oneway.cpp @@ -2234,7 +2234,7 @@ namespace cv{ void OneWayDescriptorMatcher::knnMatchImpl( InputArray _queryImage, std::vector& queryKeypoints, std::vector >& matches, int knn, - const std::vector& /*masks*/, bool /*compactResult*/ ) + InputArrayOfArrays /*masks*/, bool /*compactResult*/ ) { Mat queryImage = _queryImage.getMat(); train(); @@ -2254,7 +2254,7 @@ namespace cv{ void OneWayDescriptorMatcher::radiusMatchImpl( InputArray _queryImage, std::vector& queryKeypoints, std::vector >& matches, float maxDistance, - const std::vector& /*masks*/, bool /*compactResult*/ ) + InputArrayOfArrays /*masks*/, bool /*compactResult*/ ) { Mat queryImage = _queryImage.getMat(); diff --git a/modules/legacy/src/planardetect.cpp b/modules/legacy/src/planardetect.cpp index 8971fc4d35..304e800c6d 100644 --- a/modules/legacy/src/planardetect.cpp +++ b/modules/legacy/src/planardetect.cpp @@ -1299,7 +1299,7 @@ void FernDescriptorMatcher::calcBestProbAndMatchIdx( const Mat& image, const Poi void FernDescriptorMatcher::knnMatchImpl( InputArray _queryImage, std::vector& queryKeypoints, std::vector >& matches, int knn, - const std::vector& /*masks*/, bool /*compactResult*/ ) + InputArrayOfArrays /*masks*/, bool /*compactResult*/ ) { Mat queryImage = _queryImage.getMat(); @@ -1337,7 +1337,7 @@ void FernDescriptorMatcher::knnMatchImpl( InputArray _queryImage, std::vector& queryKeypoints, std::vector >& matches, float maxDistance, - const std::vector& /*masks*/, bool /*compactResult*/ ) + InputArrayOfArrays /*masks*/, bool /*compactResult*/ ) { Mat queryImage = _queryImage.getMat(); train();