Histogram of Oriented Gradients dalal_hog ディスクリプタおよび検出器.
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
}
すべてのメソッドのインタフェースは,CPU HOG ディスクリプタおよび検出器にできる限り似せてあります.
HOG ディスクリプタおよび検出器を作成します.
| パラメタ: | 
  | 
|---|
分類に必要な係数の個数を返します.
ブロックのヒストグラムサイズを返します.
線形SVM分類器に,係数をセットします.
(デフォルトの窓サイズで)人検出用に学習された分類器の係数を返します.
(48x96 の窓サイズで)人検出用に学習された分類器の係数を返します.
(64x128 の窓サイズで)人検出用に学習された分類器の係数を返します.
検出窓サイズ固定で,物体検出を行います.
| パラメタ: | 
  | 
|---|
検出窓サイズ可変で,物体検出を行います.
| パラメタ: | 
  | 
|---|
画像全体に対して求められたブロックディスクリプタを返します.主に,分類学習を行う場合に利用されます.
| パラメタ: | 
  | 
|---|
物体検出のためのカスケード分類器クラス.
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();
        /* 検出された物体の個数を返します. */
        int detectMultiScale( const GpuMat& image, GpuMat& objectsBuf, double scaleFactor=1.2, int minNeighbors=4, Size minSize=Size());
        /* 最大の物体のみを返します.学習時に必要な,特別なモードです. */
        bool findLargestObject;
        /* 入力画像上に矩形を描画します. */
        bool visualizeInPlace;
        Size getClassifierSize() const;
};
ファイルから分類器を読み込みます.
| パラメタ: | 
  | 
|---|
分類器が読み込まれているか否かをチェックします.
ファイルから分類器を読み込みます.以前の内容は破棄されます.
| パラメタ: | 
  | 
|---|
入力画像中の異なるサイズの物体を検出します.検出された物体は,矩形のリストとして返されます.
| パラメタ: | 
  | 
|---|
この関数は,検出された物体の個数を返すので,次例のようにして,それを取り出すことができます.
cv::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;
// 矩形の検出数だけをダウンロードします.
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);
参考: CascadeClassifier::detectMultiScale() .
o