mirror of
https://github.com/opencv/opencv.git
synced 2025-08-06 14:36:36 +08:00
added max window size parameter for cascade classifier
This commit is contained in:
parent
8adc62016b
commit
515bdfa71e
@ -128,7 +128,7 @@ CVAPI(CvSeq*) cvHaarDetectObjects( const CvArr* image,
|
||||
CvHaarClassifierCascade* cascade,
|
||||
CvMemStorage* storage, double scale_factor CV_DEFAULT(1.1),
|
||||
int min_neighbors CV_DEFAULT(3), int flags CV_DEFAULT(0),
|
||||
CvSize min_size CV_DEFAULT(cvSize(0,0)));
|
||||
CvSize min_size CV_DEFAULT(cvSize(0,0)), CvSize max_size CV_DEFAULT(cvSize(0,0)));
|
||||
|
||||
/* sets images for haar classifier cascade */
|
||||
CVAPI(void) cvSetImagesForHaarClassifierCascade( CvHaarClassifierCascade* cascade,
|
||||
@ -331,7 +331,8 @@ public:
|
||||
CV_OUT vector<Rect>& objects,
|
||||
double scaleFactor=1.1,
|
||||
int minNeighbors=3, int flags=0,
|
||||
Size minSize=Size());
|
||||
Size minSize=Size(),
|
||||
Size maxSize=Size());
|
||||
|
||||
bool setImage( Ptr<FeatureEvaluator>&, const Mat& );
|
||||
int runAt( Ptr<FeatureEvaluator>&, Point );
|
||||
|
@ -849,7 +849,7 @@ struct getRect { Rect operator ()(const CvAvgComp& e) const { return e.rect; } }
|
||||
|
||||
void CascadeClassifier::detectMultiScale( const Mat& image, vector<Rect>& objects,
|
||||
double scaleFactor, int minNeighbors,
|
||||
int flags, Size minSize )
|
||||
int flags, Size minSize, Size maxSize )
|
||||
{
|
||||
const double GROUP_EPS = 0.2;
|
||||
|
||||
@ -870,7 +870,10 @@ void CascadeClassifier::detectMultiScale( const Mat& image, vector<Rect>& object
|
||||
std::transform(vecAvgComp.begin(), vecAvgComp.end(), objects.begin(), getRect());
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
if( maxSize.height == 0 || maxSize.width == 0 )
|
||||
maxSize = image.size();
|
||||
|
||||
objects.clear();
|
||||
|
||||
Mat img = image, imgbuf(image.rows+1, image.cols+1, CV_8U);
|
||||
@ -893,6 +896,8 @@ void CascadeClassifier::detectMultiScale( const Mat& image, vector<Rect>& object
|
||||
|
||||
if( sz1.width <= 0 || sz1.height <= 0 )
|
||||
break;
|
||||
if( winSize.width > maxSize.width || winSize.height > maxSize.height )
|
||||
break;
|
||||
if( winSize.width < minSize.width || winSize.height < minSize.height )
|
||||
continue;
|
||||
|
||||
|
@ -986,7 +986,7 @@ CV_IMPL CvSeq*
|
||||
cvHaarDetectObjects( const CvArr* _img,
|
||||
CvHaarClassifierCascade* cascade,
|
||||
CvMemStorage* storage, double scaleFactor,
|
||||
int minNeighbors, int flags, CvSize minSize )
|
||||
int minNeighbors, int flags, CvSize minSize, CvSize maxSize )
|
||||
{
|
||||
const double GROUP_EPS = 0.2;
|
||||
CvMat stub, *img = (CvMat*)_img;
|
||||
@ -1003,6 +1003,12 @@ cvHaarDetectObjects( const CvArr* _img,
|
||||
bool findBiggestObject = (flags & CV_HAAR_FIND_BIGGEST_OBJECT) != 0;
|
||||
bool roughSearch = (flags & CV_HAAR_DO_ROUGH_SEARCH) != 0;
|
||||
|
||||
if( maxSize.height == 0 || maxSize.width == 0 )
|
||||
{
|
||||
maxSize.height = img->rows;
|
||||
maxSize.width = img->cols;
|
||||
}
|
||||
|
||||
if( !CV_IS_HAAR_CLASSIFIER(cascade) )
|
||||
CV_Error( !cascade ? CV_StsNullPtr : CV_StsBadArg, "Invalid classifier cascade" );
|
||||
|
||||
@ -1070,6 +1076,8 @@ cvHaarDetectObjects( const CvArr* _img,
|
||||
|
||||
if( sz1.width <= 0 || sz1.height <= 0 )
|
||||
break;
|
||||
if( winSize.width > maxSize.width || winSize.height > maxSize.height )
|
||||
break;
|
||||
if( winSize.width < minSize.width || winSize.height < minSize.height )
|
||||
continue;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user