diff --git a/modules/features2d/include/opencv2/features2d/features2d.hpp b/modules/features2d/include/opencv2/features2d/features2d.hpp index ee9362f1e..6034cd044 100644 --- a/modules/features2d/include/opencv2/features2d/features2d.hpp +++ b/modules/features2d/include/opencv2/features2d/features2d.hpp @@ -1630,7 +1630,7 @@ protected: * Remove keypoints within borderPixels of an image edge. */ static void removeBorderKeypoints( vector& keypoints, - Size imageSize, float borderSize ); + Size imageSize, int borderSize ); }; /* diff --git a/modules/features2d/src/descriptors.cpp b/modules/features2d/src/descriptors.cpp index 06c43d7eb..9cff03197 100644 --- a/modules/features2d/src/descriptors.cpp +++ b/modules/features2d/src/descriptors.cpp @@ -54,19 +54,15 @@ namespace cv */ struct RoiPredicate { - RoiPredicate( float _minX, float _minY, float _maxX, float _maxY ) - : minX(_minX), minY(_minY), maxX(_maxX), maxY(_maxY) + RoiPredicate( const Rect& _r ) : r(_r) {} bool operator()( const KeyPoint& keyPt ) const { - Point2f pt = keyPt.pt; - float eps = std::numeric_limits::epsilon(); - return (pt.x < minX + eps) || (pt.x >= maxX - eps) || - (pt.y < minY + eps) || (pt.y >= maxY - eps); + return !r.contains( keyPt.pt ); } - float minX, minY, maxX, maxY; + Rect r; }; DescriptorExtractor::~DescriptorExtractor() @@ -74,14 +70,14 @@ DescriptorExtractor::~DescriptorExtractor() void DescriptorExtractor::compute( const Mat& image, vector& keypoints, Mat& descriptors ) const { - if( image.empty() || keypoints.empty() ) - return; + if( image.empty() || keypoints.empty() ) + return; - // Check keypoints are in image. Do filter bad points here? + // Check keypoints are in image. Do filter bad points here? //for( size_t i = 0; i < keypoints.size(); i++ ) // CV_Assert( Rect(0,0, image.cols, image.rows).contains(keypoints[i].pt) ); - computeImpl( image, keypoints, descriptors ); + computeImpl( image, keypoints, descriptors ); } void DescriptorExtractor::compute( const vector& imageCollection, vector >& pointCollection, vector& descCollection ) const @@ -104,14 +100,13 @@ bool DescriptorExtractor::empty() const } void DescriptorExtractor::removeBorderKeypoints( vector& keypoints, - Size imageSize, float borderSize ) + Size imageSize, int borderSize ) { if( borderSize > 0) { keypoints.erase( remove_if(keypoints.begin(), keypoints.end(), - RoiPredicate(borderSize, borderSize, - (float)imageSize.width - borderSize, - (float)imageSize.height - borderSize)), + RoiPredicate(Rect(Point(borderSize, borderSize), + Point(imageSize.width - borderSize, imageSize.height - borderSize)))), keypoints.end() ); } }