gpu::
HOGDescriptor
¶The class implements Histogram of Oriented Gradients ([Dalal2005]) object detector.
struct CV_EXPORTS HOGDescriptor
{
enum { DEFAULT_WIN_SIGMA = -1 };
enum { DEFAULT_NLEVELS = 64 };
enum { DESCR_FORMAT_ROW_BY_ROW, DESCR_FORMAT_COL_BY_COL };
HOGDescriptor(Size win_size=Size(64, 128), Size block_size=Size(16, 16),
Size block_stride=Size(8, 8), Size cell_size=Size(8, 8),
int nbins=9, double win_sigma=DEFAULT_WIN_SIGMA,
double threshold_L2hys=0.2, bool gamma_correction=true,
int nlevels=DEFAULT_NLEVELS);
size_t getDescriptorSize() const;
size_t getBlockHistogramSize() const;
void setSVMDetector(const vector<float>& detector);
static vector<float> getDefaultPeopleDetector();
static vector<float> getPeopleDetector48x96();
static vector<float> getPeopleDetector64x128();
void detect(const GpuMat& img, vector<Point>& found_locations,
double hit_threshold=0, Size win_stride=Size(),
Size padding=Size());
void detectMultiScale(const GpuMat& img, vector<Rect>& found_locations,
double hit_threshold=0, Size win_stride=Size(),
Size padding=Size(), double scale0=1.05,
int group_threshold=2);
void getDescriptors(const GpuMat& img, Size win_stride,
GpuMat& descriptors,
int descr_format=DESCR_FORMAT_COL_BY_COL);
Size win_size;
Size block_size;
Size block_stride;
Size cell_size;
int nbins;
double win_sigma;
double threshold_L2hys;
bool gamma_correction;
int nlevels;
private:
// Hidden
}
Interfaces of all methods are kept similar to the CPU HOG
descriptor and detector analogues as much as possible.
Note
Creates the HOG
descriptor and detector.
gpu::HOGDescriptor::
HOGDescriptor
(Size win_size=Size(64, 128), Size block_size=Size(16, 16), Size block_stride=Size(8, 8), Size cell_size=Size(8, 8), int nbins=9, double win_sigma=DEFAULT_WIN_SIGMA, double threshold_L2hys=0.2, bool gamma_correction=true, int nlevels=DEFAULT_NLEVELS)¶Parameters: |
|
---|
Returns the number of coefficients required for the classification.
size_t gpu::HOGDescriptor::
getDescriptorSize
() const
¶Returns the block histogram size.
size_t gpu::HOGDescriptor::
getBlockHistogramSize
() const
¶Sets coefficients for the linear SVM classifier.
void gpu::HOGDescriptor::
setSVMDetector
(const vector<float>& detector)¶Returns coefficients of the classifier trained for people detection (for default window size).
static vector<float> gpu::HOGDescriptor::
getDefaultPeopleDetector
()¶Returns coefficients of the classifier trained for people detection (for 48x96 windows).
static vector<float> gpu::HOGDescriptor::
getPeopleDetector48x96
()¶Returns coefficients of the classifier trained for people detection (for 64x128 windows).
static vector<float> gpu::HOGDescriptor::
getPeopleDetector64x128
()¶Performs object detection without a multi-scale window.
void gpu::HOGDescriptor::
detect
(const GpuMat& img, vector<Point>& found_locations, double hit_threshold=0, Size win_stride=Size(), Size padding=Size())¶Parameters: |
|
---|
Performs object detection with a multi-scale window.
void gpu::HOGDescriptor::
detectMultiScale
(const GpuMat& img, vector<Rect>& found_locations, double hit_threshold=0, Size win_stride=Size(), Size padding=Size(), double scale0=1.05, int group_threshold=2)¶Parameters: |
|
---|
Returns block descriptors computed for the whole image.
void gpu::HOGDescriptor::
getDescriptors
(const GpuMat& img, Size win_stride, GpuMat& descriptors, int descr_format=DESCR_FORMAT_COL_BY_COL)¶Parameters: |
|
---|
The function is mainly used to learn the classifier.
gpu::
CascadeClassifier_GPU
¶Cascade classifier class used for object detection. Supports HAAR and LBP cascades.
class CV_EXPORTS CascadeClassifier_GPU
{
public:
CascadeClassifier_GPU();
CascadeClassifier_GPU(const string& filename);
~CascadeClassifier_GPU();
bool empty() const;
bool load(const string& filename);
void release();
/* Returns number of detected objects */
int detectMultiScale( const GpuMat& image, GpuMat& objectsBuf, double scaleFactor=1.2, int minNeighbors=4, Size minSize=Size());
int detectMultiScale( const GpuMat& image, GpuMat& objectsBuf, Size maxObjectSize, Size minSize = Size(), double scaleFactor = 1.1, int minNeighbors = 4);
/* Finds only the largest object. Special mode if training is required.*/
bool findLargestObject;
/* Draws rectangles in input image */
bool visualizeInPlace;
Size getClassifierSize() const;
};
Note
Loads the classifier from a file. Cascade type is detected automatically by constructor parameter.
gpu::CascadeClassifier_GPU::
CascadeClassifier_GPU
(const string& filename)¶Parameters: |
|
---|
Checks whether the classifier is loaded or not.
bool gpu::CascadeClassifier_GPU::
empty
() const
¶Loads the classifier from a file. The previous content is destroyed.
bool gpu::CascadeClassifier_GPU::
load
(const string& filename)¶Parameters: |
|
---|
Destroys the loaded classifier.
void gpu::CascadeClassifier_GPU::
release
()¶Detects objects of different sizes in the input image.
int gpu::CascadeClassifier_GPU::
detectMultiScale
(const GpuMat& image, GpuMat& objectsBuf, double scaleFactor=1.2, int minNeighbors=4, Size minSize=Size())¶
int gpu::CascadeClassifier_GPU::
detectMultiScale
(const GpuMat& image, GpuMat& objectsBuf, Size maxObjectSize, Size minSize=Size(), double scaleFactor=1.1, int minNeighbors=4)¶Parameters: |
|
---|
The detected objects are returned as a list of rectangles.
The function returns the number of detected objects, so you can retrieve them as in the following example:
gpu::CascadeClassifier_GPU cascade_gpu(...);
Mat image_cpu = imread(...)
GpuMat image_gpu(image_cpu);
GpuMat objbuf;
int detections_number = cascade_gpu.detectMultiScale( image_gpu,
objbuf, 1.2, minNeighbors);
Mat obj_host;
// download only detected number of rectangles
objbuf.colRange(0, detections_number).download(obj_host);
Rect* faces = obj_host.ptr<Rect>();
for(int i = 0; i < detections_num; ++i)
cv::rectangle(image_cpu, faces[i], Scalar(255));
imshow("Faces", image_cpu);
[Dalal2005] | Navneet Dalal and Bill Triggs. Histogram of oriented gradients for human detection. 2005. |