Fixed ugly bug in AlgorithmInfo initialisation order
This commit is contained in:
parent
56e7852e2f
commit
fa7e7e54dc
@ -149,17 +149,21 @@ struct CV_EXPORTS AlgorithmInfoData
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
static sorted_vector<string, Algorithm::Constructor> alglist;
|
static sorted_vector<string, Algorithm::Constructor>& alglist()
|
||||||
|
{
|
||||||
|
static sorted_vector<string, Algorithm::Constructor> alglist_var;
|
||||||
|
return alglist_var;
|
||||||
|
}
|
||||||
|
|
||||||
void Algorithm::getList(vector<string>& algorithms)
|
void Algorithm::getList(vector<string>& algorithms)
|
||||||
{
|
{
|
||||||
alglist.get_keys(algorithms);
|
alglist().get_keys(algorithms);
|
||||||
}
|
}
|
||||||
|
|
||||||
Ptr<Algorithm> Algorithm::_create(const string& name)
|
Ptr<Algorithm> Algorithm::_create(const string& name)
|
||||||
{
|
{
|
||||||
Algorithm::Constructor c = 0;
|
Algorithm::Constructor c = 0;
|
||||||
if( !alglist.find(name, c) )
|
if( !alglist().find(name, c) )
|
||||||
return Ptr<Algorithm>();
|
return Ptr<Algorithm>();
|
||||||
return c();
|
return c();
|
||||||
}
|
}
|
||||||
@ -282,7 +286,7 @@ AlgorithmInfo::AlgorithmInfo(const string& _name, Algorithm::Constructor create)
|
|||||||
{
|
{
|
||||||
data = new AlgorithmInfoData;
|
data = new AlgorithmInfoData;
|
||||||
data->_name = _name;
|
data->_name = _name;
|
||||||
alglist.add(_name, create);
|
alglist().add(_name, create);
|
||||||
}
|
}
|
||||||
|
|
||||||
AlgorithmInfo::~AlgorithmInfo()
|
AlgorithmInfo::~AlgorithmInfo()
|
||||||
|
@ -369,7 +369,13 @@ void PyramidAdaptedFeatureDetector::detectImpl( const Mat& image, vector<KeyPoin
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
static Algorithm* createBRIEF() { return new BriefDescriptorExtractor; }
|
static Algorithm* createBRIEF() { return new BriefDescriptorExtractor; }
|
||||||
static AlgorithmInfo brief_info("Feature2D.BRIEF", createBRIEF);
|
static AlgorithmInfo& brief_info()
|
||||||
|
{
|
||||||
|
static AlgorithmInfo brief_info_var("Feature2D.BRIEF", createBRIEF);
|
||||||
|
return brief_info_var;
|
||||||
|
}
|
||||||
|
|
||||||
|
static AlgorithmInfo& brief_info_auto = brief_info();
|
||||||
|
|
||||||
AlgorithmInfo* BriefDescriptorExtractor::info() const
|
AlgorithmInfo* BriefDescriptorExtractor::info() const
|
||||||
{
|
{
|
||||||
@ -377,17 +383,23 @@ AlgorithmInfo* BriefDescriptorExtractor::info() const
|
|||||||
if( !initialized )
|
if( !initialized )
|
||||||
{
|
{
|
||||||
BriefDescriptorExtractor brief;
|
BriefDescriptorExtractor brief;
|
||||||
brief_info.addParam(brief, "bytes", brief.bytes_);
|
brief_info().addParam(brief, "bytes", brief.bytes_);
|
||||||
|
|
||||||
initialized = true;
|
initialized = true;
|
||||||
}
|
}
|
||||||
return &brief_info;
|
return &brief_info();
|
||||||
}
|
}
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
static Algorithm* createFAST() { return new FastFeatureDetector; }
|
static Algorithm* createFAST() { return new FastFeatureDetector; }
|
||||||
static AlgorithmInfo fast_info("Feature2D.FAST", createFAST);
|
static AlgorithmInfo& fast_info()
|
||||||
|
{
|
||||||
|
static AlgorithmInfo fast_info_var("Feature2D.FAST", createFAST);
|
||||||
|
return fast_info_var;
|
||||||
|
}
|
||||||
|
|
||||||
|
static AlgorithmInfo& fast_info_auto = fast_info();
|
||||||
|
|
||||||
AlgorithmInfo* FastFeatureDetector::info() const
|
AlgorithmInfo* FastFeatureDetector::info() const
|
||||||
{
|
{
|
||||||
@ -395,19 +407,25 @@ AlgorithmInfo* FastFeatureDetector::info() const
|
|||||||
if( !initialized )
|
if( !initialized )
|
||||||
{
|
{
|
||||||
FastFeatureDetector obj;
|
FastFeatureDetector obj;
|
||||||
fast_info.addParam(obj, "threshold", obj.threshold);
|
fast_info().addParam(obj, "threshold", obj.threshold);
|
||||||
fast_info.addParam(obj, "nonmaxSuppression", obj.nonmaxSuppression);
|
fast_info().addParam(obj, "nonmaxSuppression", obj.nonmaxSuppression);
|
||||||
|
|
||||||
initialized = true;
|
initialized = true;
|
||||||
}
|
}
|
||||||
return &fast_info;
|
return &fast_info();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
static Algorithm* createStarDetector() { return new StarDetector; }
|
static Algorithm* createStarDetector() { return new StarDetector; }
|
||||||
static AlgorithmInfo star_info("Feature2D.STAR", createStarDetector);
|
static AlgorithmInfo& star_info()
|
||||||
|
{
|
||||||
|
static AlgorithmInfo star_info_var("Feature2D.STAR", createStarDetector);
|
||||||
|
return star_info_var;
|
||||||
|
}
|
||||||
|
|
||||||
|
static AlgorithmInfo& star_info_auto = star_info();
|
||||||
|
|
||||||
AlgorithmInfo* StarDetector::info() const
|
AlgorithmInfo* StarDetector::info() const
|
||||||
{
|
{
|
||||||
@ -415,21 +433,27 @@ AlgorithmInfo* StarDetector::info() const
|
|||||||
if( !initialized )
|
if( !initialized )
|
||||||
{
|
{
|
||||||
StarDetector obj;
|
StarDetector obj;
|
||||||
star_info.addParam(obj, "maxSize", obj.maxSize);
|
star_info().addParam(obj, "maxSize", obj.maxSize);
|
||||||
star_info.addParam(obj, "responseThreshold", obj.responseThreshold);
|
star_info().addParam(obj, "responseThreshold", obj.responseThreshold);
|
||||||
star_info.addParam(obj, "lineThresholdProjected", obj.lineThresholdProjected);
|
star_info().addParam(obj, "lineThresholdProjected", obj.lineThresholdProjected);
|
||||||
star_info.addParam(obj, "lineThresholdBinarized", obj.lineThresholdBinarized);
|
star_info().addParam(obj, "lineThresholdBinarized", obj.lineThresholdBinarized);
|
||||||
star_info.addParam(obj, "suppressNonmaxSize", obj.suppressNonmaxSize);
|
star_info().addParam(obj, "suppressNonmaxSize", obj.suppressNonmaxSize);
|
||||||
|
|
||||||
initialized = true;
|
initialized = true;
|
||||||
}
|
}
|
||||||
return &star_info;
|
return &star_info();
|
||||||
}
|
}
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
static Algorithm* createMSER() { return new MSER; }
|
static Algorithm* createMSER() { return new MSER; }
|
||||||
static AlgorithmInfo mser_info("Feature2D.MSER", createMSER);
|
static AlgorithmInfo& mser_info()
|
||||||
|
{
|
||||||
|
static AlgorithmInfo mser_info_var("Feature2D.MSER", createMSER);
|
||||||
|
return mser_info_var;
|
||||||
|
}
|
||||||
|
|
||||||
|
static AlgorithmInfo& mser_info_auto = mser_info();
|
||||||
|
|
||||||
AlgorithmInfo* MSER::info() const
|
AlgorithmInfo* MSER::info() const
|
||||||
{
|
{
|
||||||
@ -437,26 +461,32 @@ AlgorithmInfo* MSER::info() const
|
|||||||
if( !initialized )
|
if( !initialized )
|
||||||
{
|
{
|
||||||
MSER obj;
|
MSER obj;
|
||||||
mser_info.addParam(obj, "delta", obj.delta);
|
mser_info().addParam(obj, "delta", obj.delta);
|
||||||
mser_info.addParam(obj, "minArea", obj.minArea);
|
mser_info().addParam(obj, "minArea", obj.minArea);
|
||||||
mser_info.addParam(obj, "maxArea", obj.maxArea);
|
mser_info().addParam(obj, "maxArea", obj.maxArea);
|
||||||
mser_info.addParam(obj, "maxVariation", obj.maxVariation);
|
mser_info().addParam(obj, "maxVariation", obj.maxVariation);
|
||||||
mser_info.addParam(obj, "minDiversity", obj.minDiversity);
|
mser_info().addParam(obj, "minDiversity", obj.minDiversity);
|
||||||
mser_info.addParam(obj, "maxEvolution", obj.maxEvolution);
|
mser_info().addParam(obj, "maxEvolution", obj.maxEvolution);
|
||||||
mser_info.addParam(obj, "areaThreshold", obj.areaThreshold);
|
mser_info().addParam(obj, "areaThreshold", obj.areaThreshold);
|
||||||
mser_info.addParam(obj, "minMargin", obj.minMargin);
|
mser_info().addParam(obj, "minMargin", obj.minMargin);
|
||||||
mser_info.addParam(obj, "edgeBlurSize", obj.edgeBlurSize);
|
mser_info().addParam(obj, "edgeBlurSize", obj.edgeBlurSize);
|
||||||
|
|
||||||
initialized = true;
|
initialized = true;
|
||||||
}
|
}
|
||||||
return &mser_info;
|
return &mser_info();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
static Algorithm* createORB() { return new ORB; }
|
static Algorithm* createORB() { return new ORB; }
|
||||||
static AlgorithmInfo orb_info("Feature2D.ORB", createORB);
|
static AlgorithmInfo& orb_info()
|
||||||
|
{
|
||||||
|
static AlgorithmInfo orb_info_var("Feature2D.ORB", createORB);
|
||||||
|
return orb_info_var;
|
||||||
|
}
|
||||||
|
|
||||||
|
static AlgorithmInfo& orb_info_auto = orb_info();
|
||||||
|
|
||||||
AlgorithmInfo* ORB::info() const
|
AlgorithmInfo* ORB::info() const
|
||||||
{
|
{
|
||||||
@ -464,18 +494,18 @@ AlgorithmInfo* ORB::info() const
|
|||||||
if( !initialized )
|
if( !initialized )
|
||||||
{
|
{
|
||||||
ORB obj;
|
ORB obj;
|
||||||
orb_info.addParam(obj, "nFeatures", obj.nfeatures);
|
orb_info().addParam(obj, "nFeatures", obj.nfeatures);
|
||||||
orb_info.addParam(obj, "scaleFactor", obj.scaleFactor);
|
orb_info().addParam(obj, "scaleFactor", obj.scaleFactor);
|
||||||
orb_info.addParam(obj, "nLevels", obj.nlevels);
|
orb_info().addParam(obj, "nLevels", obj.nlevels);
|
||||||
orb_info.addParam(obj, "firstLevel", obj.firstLevel);
|
orb_info().addParam(obj, "firstLevel", obj.firstLevel);
|
||||||
orb_info.addParam(obj, "edgeThreshold", obj.edgeThreshold);
|
orb_info().addParam(obj, "edgeThreshold", obj.edgeThreshold);
|
||||||
orb_info.addParam(obj, "patchSize", obj.patchSize);
|
orb_info().addParam(obj, "patchSize", obj.patchSize);
|
||||||
orb_info.addParam(obj, "WTA_K", obj.WTA_K);
|
orb_info().addParam(obj, "WTA_K", obj.WTA_K);
|
||||||
orb_info.addParam(obj, "scoreType", obj.scoreType);
|
orb_info().addParam(obj, "scoreType", obj.scoreType);
|
||||||
|
|
||||||
initialized = true;
|
initialized = true;
|
||||||
}
|
}
|
||||||
return &orb_info;
|
return &orb_info();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool initModule_features2d(void)
|
bool initModule_features2d(void)
|
||||||
|
@ -947,7 +947,14 @@ static Algorithm* createSURF()
|
|||||||
{
|
{
|
||||||
return new SURF;
|
return new SURF;
|
||||||
}
|
}
|
||||||
static AlgorithmInfo surf_info("Feature2D.SURF", createSURF);
|
|
||||||
|
static AlgorithmInfo& surf_info()
|
||||||
|
{
|
||||||
|
static AlgorithmInfo surf_info_var("Feature2D.SURF", createSURF);
|
||||||
|
return surf_info_var;
|
||||||
|
}
|
||||||
|
|
||||||
|
static AlgorithmInfo& surf_info_auto = surf_info();
|
||||||
|
|
||||||
AlgorithmInfo* SURF::info() const
|
AlgorithmInfo* SURF::info() const
|
||||||
{
|
{
|
||||||
@ -955,24 +962,28 @@ AlgorithmInfo* SURF::info() const
|
|||||||
if( !initialized )
|
if( !initialized )
|
||||||
{
|
{
|
||||||
SURF obj;
|
SURF obj;
|
||||||
surf_info.addParam(obj, "hessianThreshold", obj.hessianThreshold);
|
surf_info().addParam(obj, "hessianThreshold", obj.hessianThreshold);
|
||||||
surf_info.addParam(obj, "nOctaves", obj.nOctaves);
|
surf_info().addParam(obj, "nOctaves", obj.nOctaves);
|
||||||
surf_info.addParam(obj, "nOctaveLayers", obj.nOctaveLayers);
|
surf_info().addParam(obj, "nOctaveLayers", obj.nOctaveLayers);
|
||||||
surf_info.addParam(obj, "extended", obj.extended);
|
surf_info().addParam(obj, "extended", obj.extended);
|
||||||
surf_info.addParam(obj, "upright", obj.upright);
|
surf_info().addParam(obj, "upright", obj.upright);
|
||||||
|
|
||||||
initialized = true;
|
initialized = true;
|
||||||
}
|
}
|
||||||
return &surf_info;
|
return &surf_info();
|
||||||
}
|
}
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
static Algorithm* createSIFT()
|
static Algorithm* createSIFT() { return new SIFT; }
|
||||||
|
|
||||||
|
static AlgorithmInfo& sift_info()
|
||||||
{
|
{
|
||||||
return new SIFT;
|
static AlgorithmInfo sift_info_var("Feature2D.SIFT", createSIFT);
|
||||||
|
return sift_info_var;
|
||||||
}
|
}
|
||||||
static AlgorithmInfo sift_info("Feature2D.SIFT", createSIFT);
|
|
||||||
|
static AlgorithmInfo& sift_info_auto = sift_info();
|
||||||
|
|
||||||
AlgorithmInfo* SIFT::info() const
|
AlgorithmInfo* SIFT::info() const
|
||||||
{
|
{
|
||||||
@ -980,15 +991,15 @@ AlgorithmInfo* SIFT::info() const
|
|||||||
if( !initialized )
|
if( !initialized )
|
||||||
{
|
{
|
||||||
SIFT obj;
|
SIFT obj;
|
||||||
sift_info.addParam(obj, "nFeatures", obj.nfeatures);
|
sift_info().addParam(obj, "nFeatures", obj.nfeatures);
|
||||||
sift_info.addParam(obj, "nOctaveLayers", obj.nOctaveLayers);
|
sift_info().addParam(obj, "nOctaveLayers", obj.nOctaveLayers);
|
||||||
sift_info.addParam(obj, "contrastThreshold", obj.contrastThreshold);
|
sift_info().addParam(obj, "contrastThreshold", obj.contrastThreshold);
|
||||||
sift_info.addParam(obj, "edgeThreshold", obj.edgeThreshold);
|
sift_info().addParam(obj, "edgeThreshold", obj.edgeThreshold);
|
||||||
sift_info.addParam(obj, "sigma", obj.sigma);
|
sift_info().addParam(obj, "sigma", obj.sigma);
|
||||||
|
|
||||||
initialized = true;
|
initialized = true;
|
||||||
}
|
}
|
||||||
return &sift_info;
|
return &sift_info();
|
||||||
}
|
}
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
Loading…
x
Reference in New Issue
Block a user