Commit 267315b9aac46d5448cb2dc588967a27696460aa
1 parent
a580a100
enforce CASCADE_FIND_BIGGEST_OBJECT
Showing
1 changed file
with
11 additions
and
0 deletions
openbr/plugins/metadata/cascade.cpp
| @@ -413,6 +413,17 @@ class CascadeTransform : public MetaTransform | @@ -413,6 +413,17 @@ class CascadeTransform : public MetaTransform | ||
| 413 | if (ROCMode) cascade->detectMultiScale(m, rects, rejectLevels, levelWeights, 1.2, minNeighbors, flags | CASCADE_SCALE_IMAGE, Size(minSize, minSize), Size(), true); | 413 | if (ROCMode) cascade->detectMultiScale(m, rects, rejectLevels, levelWeights, 1.2, minNeighbors, flags | CASCADE_SCALE_IMAGE, Size(minSize, minSize), Size(), true); |
| 414 | else cascade->detectMultiScale(m, rects, 1.2, minNeighbors, flags, Size(minSize, minSize)); | 414 | else cascade->detectMultiScale(m, rects, 1.2, minNeighbors, flags, Size(minSize, minSize)); |
| 415 | 415 | ||
| 416 | + // It appears that flags is ignored for new model files: | ||
| 417 | + // http://docs.opencv.org/modules/objdetect/doc/cascade_classification.html#cascadeclassifier-detectmultiscale | ||
| 418 | + if ((flags == CASCADE_FIND_BIGGEST_OBJECT) && (rects.size() > 1)) { | ||
| 419 | + Rect biggest = rects[0]; | ||
| 420 | + for (size_t j=0; j<rects.size(); j++) | ||
| 421 | + if (rects[j].area() > biggest.area()) | ||
| 422 | + biggest = rects[j]; | ||
| 423 | + rects.clear(); | ||
| 424 | + rects.push_back(biggest); | ||
| 425 | + } | ||
| 426 | + | ||
| 416 | bool empty = false; | 427 | bool empty = false; |
| 417 | if (!enrollAll && rects.empty()) { | 428 | if (!enrollAll && rects.empty()) { |
| 418 | empty = true; | 429 | empty = true; |