Skip to content

Instantly share code, notes, and snippets.

@patricksnape
Last active September 23, 2017 20:42
Show Gist options
  • Save patricksnape/72d964c2bf9b046513ab to your computer and use it in GitHub Desktop.
Save patricksnape/72d964c2bf9b046513ab to your computer and use it in GitHub Desktop.
Fixes #5667
--- modules/features2d/src/matchers.cpp
+++ modules/features2d/src/matchers.cpp
@@ -517,30 +517,32 @@ DescriptorMatcher::~DescriptorMatcher()
void DescriptorMatcher::add( InputArrayOfArrays _descriptors )
{
- if(_descriptors.isUMatVector())
+ if( _descriptors.isUMatVector() )
{
std::vector<UMat> descriptors;
- _descriptors.getUMatVector(descriptors);
+ _descriptors.getUMatVector( descriptors );
utrainDescCollection.insert( utrainDescCollection.end(), descriptors.begin(), descriptors.end() );
}
- else if(_descriptors.isUMat())
+ else if( _descriptors.isUMat() )
{
std::vector<UMat> descriptors = std::vector<UMat>(1, _descriptors.getUMat());
utrainDescCollection.insert( utrainDescCollection.end(), descriptors.begin(), descriptors.end() );
}
- else if(_descriptors.isMatVector())
+ else if( _descriptors.isMatVector() )
{
std::vector<Mat> descriptors;
_descriptors.getMatVector(descriptors);
trainDescCollection.insert( trainDescCollection.end(), descriptors.begin(), descriptors.end() );
}
- else if(_descriptors.isMat())
+ else if( _descriptors.isMat() )
{
std::vector<Mat> descriptors = std::vector<Mat>(1, _descriptors.getMat());
trainDescCollection.insert( trainDescCollection.end(), descriptors.begin(), descriptors.end() );
}
else
+ {
CV_Assert( _descriptors.isUMat() || _descriptors.isUMatVector() || _descriptors.isMat() || _descriptors.isMatVector() );
+ }
}
const std::vector<Mat>& DescriptorMatcher::getTrainDescriptors() const
@@ -1032,12 +1034,37 @@ FlannBasedMatcher::FlannBasedMatcher( const Ptr<flann::IndexParams>& _indexParam
void FlannBasedMatcher::add( InputArrayOfArrays _descriptors )
{
DescriptorMatcher::add( _descriptors );
- std::vector<UMat> descriptors;
- _descriptors.getUMatVector(descriptors);
- for( size_t i = 0; i < descriptors.size(); i++ )
+ if( _descriptors.isUMatVector() )
+ {
+ std::vector<UMat> 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() )
{
- addedDescCount += descriptors[i].rows;
+ std::vector<Mat> 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() );
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment