class cv::CascadeClassifier

Overview

Cascade classifier class for object detection. More…

#include <objdetect.hpp>

class CascadeClassifier
{
public:
    // fields

    Ptr<BaseCascadeClassifier> cc;

    // construction

    CascadeClassifier();
    CascadeClassifier(const String& filename);

    // methods

    void
    detectMultiScale(
        InputArray image,
        std::vector<Rect>& objects,
        double scaleFactor = 1.1,
        int minNeighbors = 3,
        int flags = 0,
        Size minSize = Size(),
        Size maxSize = Size()
        );

    void
    detectMultiScale(
        InputArray image,
        std::vector<Rect>& objects,
        std::vector<int>& numDetections,
        double scaleFactor = 1.1,
        int minNeighbors = 3,
        int flags = 0,
        Size minSize = Size(),
        Size maxSize = Size()
        );

    void
    detectMultiScale(
        InputArray image,
        std::vector<Rect>& objects,
        std::vector<int>& rejectLevels,
        std::vector<double>& levelWeights,
        double scaleFactor = 1.1,
        int minNeighbors = 3,
        int flags = 0,
        Size minSize = Size(),
        Size maxSize = Size(),
        bool outputRejectLevels = false
        );

    bool
    empty() const;

    int
    getFeatureType() const;

    Ptr<BaseCascadeClassifier::MaskGenerator>
    getMaskGenerator();

    void*
    getOldCascade();

    Size
    getOriginalWindowSize() const;

    bool
    isOldFormatCascade() const;

    bool
    load(const String& filename);

    bool
    read(const FileNode& node);

    void
    setMaskGenerator(const Ptr<BaseCascadeClassifier::MaskGenerator>& maskGenerator);

    static
    bool
    convert(
        const String& oldcascade,
        const String& newcascade
        );
};

Detailed Documentation

Cascade classifier class for object detection.

Construction

CascadeClassifier(const String& filename)

Loads a classifier from a file.

Parameters:

filename Name of the file from which the classifier is loaded.

Methods

void
detectMultiScale(
    InputArray image,
    std::vector<Rect>& objects,
    double scaleFactor = 1.1,
    int minNeighbors = 3,
    int flags = 0,
    Size minSize = Size(),
    Size maxSize = Size()
    )

Detects objects of different sizes in the input image. The detected objects are returned as a list of rectangles.

The function is parallelized with the TBB library.

  • (Python) A face detection example using cascade classifiers can be found at opencv_source_code/samples/python/facedetect.py

Parameters:

image Matrix of the type CV_8U containing an image where objects are detected.
objects Vector of rectangles where each rectangle contains the detected object, the rectangles may be partially outside the original image.
scaleFactor Parameter specifying how much the image size is reduced at each image scale.
minNeighbors Parameter specifying how many neighbors each candidate rectangle should have to retain it.
flags Parameter with the same meaning for an old cascade as in the function cvHaarDetectObjects. It is not used for a new cascade.
minSize Minimum possible object size. Objects smaller than that are ignored.
maxSize Maximum possible object size. Objects larger than that are ignored. If maxSize == minSize model is evaluated on single scale.
void
detectMultiScale(
    InputArray image,
    std::vector<Rect>& objects,
    std::vector<int>& numDetections,
    double scaleFactor = 1.1,
    int minNeighbors = 3,
    int flags = 0,
    Size minSize = Size(),
    Size maxSize = Size()
    )

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

Parameters:

image Matrix of the type CV_8U containing an image where objects are detected.
objects Vector of rectangles where each rectangle contains the detected object, the rectangles may be partially outside the original image.
numDetections Vector of detection numbers for the corresponding objects. An object’s number of detections is the number of neighboring positively classified rectangles that were joined together to form the object.
scaleFactor Parameter specifying how much the image size is reduced at each image scale.
minNeighbors Parameter specifying how many neighbors each candidate rectangle should have to retain it.
flags Parameter with the same meaning for an old cascade as in the function cvHaarDetectObjects. It is not used for a new cascade.
minSize Minimum possible object size. Objects smaller than that are ignored.
maxSize Maximum possible object size. Objects larger than that are ignored. If maxSize == minSize model is evaluated on single scale.
void
detectMultiScale(
    InputArray image,
    std::vector<Rect>& objects,
    std::vector<int>& rejectLevels,
    std::vector<double>& levelWeights,
    double scaleFactor = 1.1,
    int minNeighbors = 3,
    int flags = 0,
    Size minSize = Size(),
    Size maxSize = Size(),
    bool outputRejectLevels = false
    )

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. This function allows you to retrieve the final stage decision certainty of classification. For this, one needs to set outputRejectLevels on true and provide the rejectLevels and levelWeights parameter. For each resulting detection, levelWeights will then contain the certainty of classification at the final stage. This value can then be used to separate strong from weaker classifications.

A code sample on how to use it efficiently can be found below:

Mat img;
vector<double> weights;
vector<int> levels;
vector<Rect> detections;
CascadeClassifier model("/path/to/your/model.xml");
model.detectMultiScale(img, detections, levels, weights, 1.1, 3, 0, Size(), Size(), true);
cerr << "Detection " << detections[0] << " with weight " << weights[0] << endl;
bool
empty() const

Checks whether the classifier has been loaded.

bool
load(const String& filename)

Loads a classifier from a file.

Parameters:

filename Name of the file from which the classifier is loaded. The file may contain an old HAAR classifier trained by the haartraining application or a new cascade classifier trained by the traincascade application.
bool
read(const FileNode& node)

Reads a classifier from a FileStorage node.

The file may contain a new cascade classifier (trained traincascade application) only.