filtered MSER keypoints that have centers out of image
This commit is contained in:
parent
3df72fe669
commit
017895dd93
@ -114,7 +114,7 @@ CV_EXPORTS void read(const FileNode& node, CV_OUT vector<KeyPoint>& keypoints);
|
|||||||
/*
|
/*
|
||||||
* A class filters a vector of keypoints.
|
* A class filters a vector of keypoints.
|
||||||
* Because now it is difficult to provide a convenient interface for all usage scenarios of the keypoints filter class,
|
* Because now it is difficult to provide a convenient interface for all usage scenarios of the keypoints filter class,
|
||||||
* it has only 4 needed by now static methods.
|
* it has only several needed by now static methods.
|
||||||
*/
|
*/
|
||||||
class CV_EXPORTS KeyPointsFilter
|
class CV_EXPORTS KeyPointsFilter
|
||||||
{
|
{
|
||||||
@ -142,7 +142,7 @@ public:
|
|||||||
/*
|
/*
|
||||||
* Retain the specified number of the best keypoints (according to the response)
|
* Retain the specified number of the best keypoints (according to the response)
|
||||||
*/
|
*/
|
||||||
static void retainBest(vector<KeyPoint>& keypoints, int npoints);
|
static void retainBest( vector<KeyPoint>& keypoints, int npoints );
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -1288,15 +1288,17 @@ void MserFeatureDetector::detectImpl( const Mat& image, vector<KeyPoint>& keypoi
|
|||||||
(*this)(image, msers, mask);
|
(*this)(image, msers, mask);
|
||||||
|
|
||||||
vector<vector<Point> >::const_iterator contour_it = msers.begin();
|
vector<vector<Point> >::const_iterator contour_it = msers.begin();
|
||||||
|
Rect r(0, 0, image.cols, image.rows);
|
||||||
for( ; contour_it != msers.end(); ++contour_it )
|
for( ; contour_it != msers.end(); ++contour_it )
|
||||||
{
|
{
|
||||||
// TODO check transformation from MSER region to KeyPoint
|
// TODO check transformation from MSER region to KeyPoint
|
||||||
RotatedRect rect = fitEllipse(Mat(*contour_it));
|
RotatedRect rect = fitEllipse(Mat(*contour_it));
|
||||||
float diam = sqrt(rect.size.height*rect.size.width);
|
float diam = sqrt(rect.size.height*rect.size.width);
|
||||||
|
|
||||||
if( diam > std::numeric_limits<float>::epsilon() )
|
if( diam > std::numeric_limits<float>::epsilon() && r.contains(rect.center) )
|
||||||
keypoints.push_back( KeyPoint( rect.center, diam, rect.angle) );
|
keypoints.push_back( KeyPoint( rect.center, diam, rect.angle) );
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user