mirror of
https://github.com/opencv/opencv.git
synced 2026-07-30 07:43:03 +04:00
removed the old C API for Haar-based object detection; use CascadeClassifier from now on
This commit is contained in:
@@ -44,7 +44,6 @@
|
||||
#include <iostream>
|
||||
|
||||
#include "cascadedetect.hpp"
|
||||
#include "opencv2/objdetect/objdetect_c.h"
|
||||
#include "opencl_kernels_objdetect.hpp"
|
||||
|
||||
namespace cv
|
||||
@@ -1071,9 +1070,6 @@ public:
|
||||
};
|
||||
|
||||
|
||||
struct getRect { Rect operator ()(const CvAvgComp& e) const { return e.rect; } };
|
||||
struct getNeighbors { int operator ()(const CvAvgComp& e) const { return e.neighbors; } };
|
||||
|
||||
#ifdef HAVE_OPENCL
|
||||
bool CascadeClassifierImpl::ocl_detectMultiScaleNoGrouping( const std::vector<float>& scales,
|
||||
std::vector<Rect>& candidates )
|
||||
@@ -1227,24 +1223,6 @@ void* CascadeClassifierImpl::getOldCascade()
|
||||
return oldCascade;
|
||||
}
|
||||
|
||||
static void detectMultiScaleOldFormat( const Mat& image, Ptr<CvHaarClassifierCascade> oldCascade,
|
||||
std::vector<Rect>& objects,
|
||||
std::vector<int>& rejectLevels,
|
||||
std::vector<double>& levelWeights,
|
||||
std::vector<CvAvgComp>& vecAvgComp,
|
||||
double scaleFactor, int minNeighbors,
|
||||
int flags, Size minObjectSize, Size maxObjectSize,
|
||||
bool outputRejectLevels = false )
|
||||
{
|
||||
MemStorage storage(cvCreateMemStorage(0));
|
||||
CvMat _image = cvMat(image);
|
||||
CvSeq* _objects = cvHaarDetectObjectsForROC( &_image, oldCascade, storage, rejectLevels, levelWeights, scaleFactor,
|
||||
minNeighbors, flags, cvSize(minObjectSize), cvSize(maxObjectSize), outputRejectLevels );
|
||||
Seq<CvAvgComp>(_objects).copyTo(vecAvgComp);
|
||||
objects.resize(vecAvgComp.size());
|
||||
std::transform(vecAvgComp.begin(), vecAvgComp.end(), objects.begin(), getRect());
|
||||
}
|
||||
|
||||
void CascadeClassifierImpl::detectMultiScaleNoGrouping( InputArray _image, std::vector<Rect>& candidates,
|
||||
std::vector<int>& rejectLevels, std::vector<double>& levelWeights,
|
||||
double scaleFactor, Size minObjectSize, Size maxObjectSize,
|
||||
@@ -1374,7 +1352,7 @@ void CascadeClassifierImpl::detectMultiScale( InputArray _image, std::vector<Rec
|
||||
std::vector<int>& rejectLevels,
|
||||
std::vector<double>& levelWeights,
|
||||
double scaleFactor, int minNeighbors,
|
||||
int flags, Size minObjectSize, Size maxObjectSize,
|
||||
int /*flags*/, Size minObjectSize, Size maxObjectSize,
|
||||
bool outputRejectLevels )
|
||||
{
|
||||
CV_INSTRUMENT_REGION();
|
||||
@@ -1384,26 +1362,16 @@ void CascadeClassifierImpl::detectMultiScale( InputArray _image, std::vector<Rec
|
||||
if( empty() )
|
||||
return;
|
||||
|
||||
if( isOldFormatCascade() )
|
||||
detectMultiScaleNoGrouping( _image, objects, rejectLevels, levelWeights, scaleFactor, minObjectSize, maxObjectSize,
|
||||
outputRejectLevels );
|
||||
const double GROUP_EPS = 0.2;
|
||||
if( outputRejectLevels )
|
||||
{
|
||||
Mat image = _image.getMat();
|
||||
std::vector<CvAvgComp> fakeVecAvgComp;
|
||||
detectMultiScaleOldFormat( image, oldCascade, objects, rejectLevels, levelWeights, fakeVecAvgComp, scaleFactor,
|
||||
minNeighbors, flags, minObjectSize, maxObjectSize, outputRejectLevels );
|
||||
groupRectangles( objects, rejectLevels, levelWeights, minNeighbors, GROUP_EPS );
|
||||
}
|
||||
else
|
||||
{
|
||||
detectMultiScaleNoGrouping( _image, objects, rejectLevels, levelWeights, scaleFactor, minObjectSize, maxObjectSize,
|
||||
outputRejectLevels );
|
||||
const double GROUP_EPS = 0.2;
|
||||
if( outputRejectLevels )
|
||||
{
|
||||
groupRectangles( objects, rejectLevels, levelWeights, minNeighbors, GROUP_EPS );
|
||||
}
|
||||
else
|
||||
{
|
||||
groupRectangles( objects, minNeighbors, GROUP_EPS );
|
||||
}
|
||||
groupRectangles( objects, minNeighbors, GROUP_EPS );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1421,7 +1389,7 @@ void CascadeClassifierImpl::detectMultiScale( InputArray _image, std::vector<Rec
|
||||
|
||||
void CascadeClassifierImpl::detectMultiScale( InputArray _image, std::vector<Rect>& objects,
|
||||
std::vector<int>& numDetections, double scaleFactor,
|
||||
int minNeighbors, int flags, Size minObjectSize,
|
||||
int minNeighbors, int /*flags*/, Size minObjectSize,
|
||||
Size maxObjectSize )
|
||||
{
|
||||
CV_INSTRUMENT_REGION();
|
||||
@@ -1434,20 +1402,10 @@ void CascadeClassifierImpl::detectMultiScale( InputArray _image, std::vector<Rec
|
||||
|
||||
std::vector<int> fakeLevels;
|
||||
std::vector<double> fakeWeights;
|
||||
if( isOldFormatCascade() )
|
||||
{
|
||||
std::vector<CvAvgComp> vecAvgComp;
|
||||
detectMultiScaleOldFormat( image, oldCascade, objects, fakeLevels, fakeWeights, vecAvgComp, scaleFactor,
|
||||
minNeighbors, flags, minObjectSize, maxObjectSize );
|
||||
numDetections.resize(vecAvgComp.size());
|
||||
std::transform(vecAvgComp.begin(), vecAvgComp.end(), numDetections.begin(), getNeighbors());
|
||||
}
|
||||
else
|
||||
{
|
||||
detectMultiScaleNoGrouping( image, objects, fakeLevels, fakeWeights, scaleFactor, minObjectSize, maxObjectSize );
|
||||
const double GROUP_EPS = 0.2;
|
||||
groupRectangles( objects, numDetections, minNeighbors, GROUP_EPS );
|
||||
}
|
||||
|
||||
detectMultiScaleNoGrouping( image, objects, fakeLevels, fakeWeights, scaleFactor, minObjectSize, maxObjectSize );
|
||||
const double GROUP_EPS = 0.2;
|
||||
groupRectangles( objects, numDetections, minNeighbors, GROUP_EPS );
|
||||
}
|
||||
|
||||
|
||||
@@ -1613,9 +1571,6 @@ bool CascadeClassifierImpl::read_(const FileNode& root)
|
||||
return featureEvaluator->read(fn, data.origWinSize);
|
||||
}
|
||||
|
||||
void DefaultDeleter<CvHaarClassifierCascade>::operator ()(CvHaarClassifierCascade* obj) const { cvReleaseHaarClassifierCascade(&obj); }
|
||||
|
||||
|
||||
BaseCascadeClassifier::~BaseCascadeClassifier()
|
||||
{
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user