1022 |
1022 |
};
|
1023 |
1023 |
|
1024 |
1024 |
struct getRect { Rect operator ()(const CvAvgComp& e) const { return e.rect; } };
|
|
1025 |
struct getNeighbors { int operator ()(const CvAvgComp& e) const { return e.neighbors; } };
|
1025 |
1026 |
|
1026 |
1027 |
|
1027 |
1028 |
bool CascadeClassifier::detectSingleScale( const Mat& image, int stripCount, Size processingRectSize,
|
... | ... | |
1091 |
1092 |
vector<double>& levelWeights,
|
1092 |
1093 |
double scaleFactor, int minNeighbors,
|
1093 |
1094 |
int flags, Size minObjectSize, Size maxObjectSize,
|
1094 |
|
bool outputRejectLevels )
|
|
1095 |
bool outputRejectLevels, bool outputWeights )
|
1095 |
1096 |
{
|
1096 |
1097 |
const double GROUP_EPS = 0.2;
|
1097 |
1098 |
|
1098 |
1099 |
CV_Assert( scaleFactor > 1 && image.depth() == CV_8U );
|
|
1100 |
CV_Assert( !(outputRejectLevels && outputWeights) );
|
1099 |
1101 |
|
1100 |
1102 |
if( empty() )
|
1101 |
1103 |
return;
|
... | ... | |
1110 |
1112 |
Seq<CvAvgComp>(_objects).copyTo(vecAvgComp);
|
1111 |
1113 |
objects.resize(vecAvgComp.size());
|
1112 |
1114 |
std::transform(vecAvgComp.begin(), vecAvgComp.end(), objects.begin(), getRect());
|
|
1115 |
if (outputWeights) {
|
|
1116 |
rejectLevels.resize(vecAvgComp.size());
|
|
1117 |
std::transform(vecAvgComp.begin(), vecAvgComp.end(), rejectLevels.begin(),
|
|
1118 |
getNeighbors());
|
|
1119 |
}
|
1113 |
1120 |
return;
|
1114 |
1121 |
}
|
1115 |
1122 |
|
... | ... | |
1187 |
1194 |
{
|
1188 |
1195 |
groupRectangles( objects, rejectLevels, levelWeights, minNeighbors, GROUP_EPS );
|
1189 |
1196 |
}
|
|
1197 |
else if( outputWeights )
|
|
1198 |
{
|
|
1199 |
groupRectangles( objects, rejectLevels, minNeighbors, GROUP_EPS );
|
|
1200 |
}
|
1190 |
1201 |
else
|
1191 |
1202 |
{
|
1192 |
1203 |
groupRectangles( objects, minNeighbors, GROUP_EPS );
|
... | ... | |
1203 |
1214 |
minNeighbors, flags, minObjectSize, maxObjectSize, false );
|
1204 |
1215 |
}
|
1205 |
1216 |
|
|
1217 |
void CascadeClassifier::detectMultiScale( const Mat& image, CV_OUT vector<Rect>& objects,
|
|
1218 |
vector<int>& weights, double scaleFactor,
|
|
1219 |
int minNeighbors, int flags, Size minObjectSize,
|
|
1220 |
Size maxObjectSize )
|
|
1221 |
{
|
|
1222 |
vector<double> fakeLevelWeights;
|
|
1223 |
detectMultiScale( image, objects, weights, fakeLevelWeights, scaleFactor,
|
|
1224 |
minNeighbors, flags, minObjectSize, maxObjectSize, false, true );
|
|
1225 |
}
|
|
1226 |
|
1206 |
1227 |
bool CascadeClassifier::Data::read(const FileNode &root)
|
1207 |
1228 |
{
|
1208 |
1229 |
static const float THRESHOLD_EPS = 1e-5f;
|