diff --git a/modules/features2d/src/matchers.cpp b/modules/features2d/src/matchers.cpp index e80473719..a1b557fa9 100644 --- a/modules/features2d/src/matchers.cpp +++ b/modules/features2d/src/matchers.cpp @@ -1034,12 +1034,37 @@ FlannBasedMatcher::FlannBasedMatcher( const Ptr& _indexParam void FlannBasedMatcher::add( InputArrayOfArrays _descriptors ) { DescriptorMatcher::add( _descriptors ); - std::vector descriptors; - _descriptors.getUMatVector(descriptors); - for( size_t i = 0; i < descriptors.size(); i++ ) + if( _descriptors.isUMatVector() ) { - addedDescCount += descriptors[i].rows; + std::vector descriptors; + _descriptors.getUMatVector( descriptors ); + + for( size_t i = 0; i < descriptors.size(); i++ ) + { + addedDescCount += descriptors[i].rows; + } + } + else if( _descriptors.isUMat() ) + { + addedDescCount += _descriptors.getUMat().rows; + } + else if( _descriptors.isMatVector() ) + { + std::vector descriptors; + _descriptors.getMatVector(descriptors); + for( size_t i = 0; i < descriptors.size(); i++ ) + { + addedDescCount += descriptors[i].rows; + } + } + else if( _descriptors.isMat() ) + { + addedDescCount += _descriptors.getMat().rows; + } + else + { + CV_Assert( _descriptors.isUMat() || _descriptors.isUMatVector() || _descriptors.isMat() || _descriptors.isMatVector() ); } }