cascade_classifier.patch

Peter Minin, 2013-06-04 04:42 pm

Download (4.4 kB)

 
modules/objdetect/include/opencv2/objdetect/objdetect.hpp 2013-06-03 21:09:47.425708483 +0400
382 382
                                   Size minSize=Size(),
383 383
                                   Size maxSize=Size() );
384 384

  
385
    CV_WRAP virtual void detectMultiScale( const Mat& image,
386
                                   CV_OUT vector<Rect>& objects,
387
                                   vector<int>& weights,
388
                                   double scaleFactor=1.1,
389
                                   int minNeighbors=3, int flags=0,
390
                                   Size minSize=Size(),
391
                                   Size maxSize=Size() );
392

  
385 393
    CV_WRAP virtual void detectMultiScale( const Mat& image,
386 394
                                   CV_OUT vector<Rect>& objects,
387 395
                                   vector<int>& rejectLevels,
......
390 400
                                   int minNeighbors=3, int flags=0,
391 401
                                   Size minSize=Size(),
392 402
                                   Size maxSize=Size(),
393
                                   bool outputRejectLevels=false );
403
                                   bool outputRejectLevels=false,
404
                                   bool outputWeights=false );
394 405

  
395 406

  
396 407
    bool isOldFormatCascade() const;
modules/objdetect/src/cascadedetect.cpp 2013-06-03 21:27:16.289661720 +0400
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;