added max window size parameter for cascade classifier
This commit is contained in:
@@ -128,7 +128,7 @@ CVAPI(CvSeq*) cvHaarDetectObjects( const CvArr* image,
|
|||||||
CvHaarClassifierCascade* cascade,
|
CvHaarClassifierCascade* cascade,
|
||||||
CvMemStorage* storage, double scale_factor CV_DEFAULT(1.1),
|
CvMemStorage* storage, double scale_factor CV_DEFAULT(1.1),
|
||||||
int min_neighbors CV_DEFAULT(3), int flags CV_DEFAULT(0),
|
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 */
|
/* sets images for haar classifier cascade */
|
||||||
CVAPI(void) cvSetImagesForHaarClassifierCascade( CvHaarClassifierCascade* cascade,
|
CVAPI(void) cvSetImagesForHaarClassifierCascade( CvHaarClassifierCascade* cascade,
|
||||||
@@ -331,7 +331,8 @@ public:
|
|||||||
CV_OUT vector<Rect>& objects,
|
CV_OUT vector<Rect>& objects,
|
||||||
double scaleFactor=1.1,
|
double scaleFactor=1.1,
|
||||||
int minNeighbors=3, int flags=0,
|
int minNeighbors=3, int flags=0,
|
||||||
Size minSize=Size());
|
Size minSize=Size(),
|
||||||
|
Size maxSize=Size());
|
||||||
|
|
||||||
bool setImage( Ptr<FeatureEvaluator>&, const Mat& );
|
bool setImage( Ptr<FeatureEvaluator>&, const Mat& );
|
||||||
int runAt( Ptr<FeatureEvaluator>&, Point );
|
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,
|
void CascadeClassifier::detectMultiScale( const Mat& image, vector<Rect>& objects,
|
||||||
double scaleFactor, int minNeighbors,
|
double scaleFactor, int minNeighbors,
|
||||||
int flags, Size minSize )
|
int flags, Size minSize, Size maxSize )
|
||||||
{
|
{
|
||||||
const double GROUP_EPS = 0.2;
|
const double GROUP_EPS = 0.2;
|
||||||
|
|
||||||
@@ -871,6 +871,9 @@ void CascadeClassifier::detectMultiScale( const Mat& image, vector<Rect>& object
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if( maxSize.height == 0 || maxSize.width == 0 )
|
||||||
|
maxSize = image.size();
|
||||||
|
|
||||||
objects.clear();
|
objects.clear();
|
||||||
|
|
||||||
Mat img = image, imgbuf(image.rows+1, image.cols+1, CV_8U);
|
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 )
|
if( sz1.width <= 0 || sz1.height <= 0 )
|
||||||
break;
|
break;
|
||||||
|
if( winSize.width > maxSize.width || winSize.height > maxSize.height )
|
||||||
|
break;
|
||||||
if( winSize.width < minSize.width || winSize.height < minSize.height )
|
if( winSize.width < minSize.width || winSize.height < minSize.height )
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
@@ -986,7 +986,7 @@ CV_IMPL CvSeq*
|
|||||||
cvHaarDetectObjects( const CvArr* _img,
|
cvHaarDetectObjects( const CvArr* _img,
|
||||||
CvHaarClassifierCascade* cascade,
|
CvHaarClassifierCascade* cascade,
|
||||||
CvMemStorage* storage, double scaleFactor,
|
CvMemStorage* storage, double scaleFactor,
|
||||||
int minNeighbors, int flags, CvSize minSize )
|
int minNeighbors, int flags, CvSize minSize, CvSize maxSize )
|
||||||
{
|
{
|
||||||
const double GROUP_EPS = 0.2;
|
const double GROUP_EPS = 0.2;
|
||||||
CvMat stub, *img = (CvMat*)_img;
|
CvMat stub, *img = (CvMat*)_img;
|
||||||
@@ -1003,6 +1003,12 @@ cvHaarDetectObjects( const CvArr* _img,
|
|||||||
bool findBiggestObject = (flags & CV_HAAR_FIND_BIGGEST_OBJECT) != 0;
|
bool findBiggestObject = (flags & CV_HAAR_FIND_BIGGEST_OBJECT) != 0;
|
||||||
bool roughSearch = (flags & CV_HAAR_DO_ROUGH_SEARCH) != 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) )
|
if( !CV_IS_HAAR_CLASSIFIER(cascade) )
|
||||||
CV_Error( !cascade ? CV_StsNullPtr : CV_StsBadArg, "Invalid 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 )
|
if( sz1.width <= 0 || sz1.height <= 0 )
|
||||||
break;
|
break;
|
||||||
|
if( winSize.width > maxSize.width || winSize.height > maxSize.height )
|
||||||
|
break;
|
||||||
if( winSize.width < minSize.width || winSize.height < minSize.height )
|
if( winSize.width < minSize.width || winSize.height < minSize.height )
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user