4
votes

What does cv_haar_scale_image do in opencv's function cvhaardetectobjects?

4

4 Answers

4
votes

The flag CV_HAAR_SCALE_IMAGE, tells the algorithm to scale the image rather than the detector.

There is an example of its use here: Face detection: How to find faces with openCV

5
votes

It enables more optimization.

The face detect implementation is optimized for CV_HAAR_SCALE_IMAGE more than CV_HAAR_DO_CANNY_PRUNING.

Because CV_HAAR_SCALE_IMAGE method is more DMA (direct memory access) friendly. Default method (CV_HAAR_DO_CANNY_PRUNING) implementation needs random access to main memory area widely.

3
votes

According to EMGU, which is an .NET wrapper for OpenCV, and sometimes has way better documentation than OpenCV,

DO_CANNY_PRUNING
If it is set, the function uses Canny edge detector to reject some image regions that contain too few or too much edges and thus can not contain the searched object. The particular threshold values are tuned for face detection and in this case the pruning speeds up the processing

SCALE_IMAGE
For each scale factor used the function will downscale the image rather than "zoom" the feature coordinates in the classifier cascade. Currently, the option can only be used alone, i.e. the flag can not be set together with the others

FIND_BIGGEST_OBJECT
If it is set, the function finds the largest object (if any) in the image. That is, the output sequence will contain one (or zero) element(s)

DO_ROUGH_SEARCH
It should be used only when CV_HAAR_FIND_BIGGEST_OBJECT is set and min_neighbors > 0. If the flag is set, the function does not look for candidates of a smaller size as soon as it has found the object (with enough neighbor candidates) at the current scale. Typically, when min_neighbors is fixed, the mode yields less accurate (a bit larger) object rectangle than the regular single-object mode (flags=CV_HAAR_FIND_BIGGEST_OBJECT), but it is much faster, up to an order of magnitude. A greater value of min_neighbors may be specified to improve the accuracy.

Source

0
votes

CV_HAAR_DO_CANNY_PRUNING causes flat regions that have no lines to be skipped by the classifier