root/lang/cpluspluscli/OpenCvSharp2/trunk/OpenCvSharp/Src/Class/CvHaarClassifierCascade.cs @ 32668

Revision 32668, 14.7 kB (checked in by schima, 4 years ago)

CvHaarFeature?, CvHaarClassifier?, CvHaarStageClassifier?, CvHaarClassifierCascade?

Line 
1using System;
2using System.Collections.Generic;
3using System.Linq;
4using System.Text;
5
6namespace KwsmLab.OpenCvSharp
7{
8#if LANG_JP
9    /// <summary>
10    /// 段階分類器のカスケードまたは木
11    /// </summary>
12#else
13    /// <summary>
14    /// Cascade or tree of stage classifiers
15    /// </summary>
16#endif
17    public class CvHaarClassifierCascade : DisposableObject, ICvPtrHolder
18    {
19        /// <summary>
20        /// C++/CLI wrapper of data pointer
21        /// </summary>
22        private Extern.WCvHaarClassifierCascade _data;
23        /// <summary>
24        /// Data pointer
25        /// </summary>
26        private IntPtr _ptr;
27
28
29        #region Init and Disposal
30#if LANG_JP
31        /// <summary>
32        /// ポインタで初期化
33        /// </summary>
34        /// <param name="ptr">struct CvHaarClassifierCascade*</param>
35#else
36        /// <summary>
37        /// Initializes from native pointer
38        /// </summary>
39        /// <param name="ptr"></param>
40#endif
41        public CvHaarClassifierCascade(IntPtr ptr)
42            : this(ptr, true)
43        {
44        }
45        /// <summary>
46        /// ポインタと自動解放の可否を指定して初期化
47        /// </summary>
48        /// <param name="ptr">struct CvHaarClassifierCascade*</param>
49        /// <param name="isEnabledDispose">自動的にGCで解放してよいかどうか</param>
50        internal CvHaarClassifierCascade(IntPtr ptr, bool isEnabledDispose)
51            : base(isEnabledDispose)
52        {
53            if (ptr == IntPtr.Zero)
54            {
55                throw new OpenCvSharpException("CvHaarClassifierCascadeの生成に失敗しました。");
56            }
57            this._ptr = ptr;
58            this._data = new Extern.WCvHaarClassifierCascade(ptr);
59        }
60#if LANG_JP
61            /// <summary>
62            /// ファイルからHaar分類機のカスケードを読み込んで返す (cvLoad相当).
63            /// </summary>
64            /// <param name="filename">読み込むファイル(xml/yaml)</param>
65            /// <returns>CvHaarClassifierCascade</returns>
66#else
67        /// <summary>
68        /// Loads object from file
69        /// </summary>
70        /// <param name="filename">File name (xml/yaml)</param>
71        /// <returns></returns>
72#endif
73            public static CvHaarClassifierCascade FromFile( string filename )
74            {
75            if (string.IsNullOrEmpty(filename))
76            {
77                throw new OpenCvSharpException("CvHaarClassifierCascadeの生成に失敗しました。");
78            }
79                    return Cv.Load<CvHaarClassifierCascade>(filename);
80            }
81
82#if LANG_JP
83        /// <summary>
84        /// リソースの解放 (cvReleaseHaarClassifierCascade)
85        /// </summary>
86#else
87        /// <summary>
88        /// Releases using cvReleaseHaarClassifierCascade
89        /// </summary>
90#endif
91        public override void Dispose()
92        {
93            if (IsEnabledDispose && !IsDisposed)
94            {
95                CvDll.cvReleaseHaarClassifierCascade(ref _ptr);               
96            }
97            base.Dispose();
98        }
99        #endregion
100
101
102        #region Properties
103        /// <summary>
104        /// Data pointer (CvHaarClassifierCascade*)
105        /// </summary>
106        public IntPtr CvPtr
107        {
108            get { return _ptr; }
109        }
110        /// <summary>
111        /// sizeof(CvHaarClassifierCascade)
112        /// </summary>
113        public const Int32 SizeOf = Extern.WCvHaarClassifierCascade.SizeOf;
114
115
116#if LANG_JP
117        /// <summary>
118        /// シグネチャ
119        /// </summary>
120#else
121        /// <summary>
122        /// Signature
123        /// </summary>
124#endif
125        public int Flags
126        {
127            get { return _data.flags; }
128        }
129#if LANG_JP
130        /// <summary>
131        /// 段階数
132        /// </summary>
133#else
134        /// <summary>
135        /// Number of stages
136        /// </summary>
137#endif
138        public int Count
139        {
140            get { return _data.count; }
141        }
142#if LANG_JP
143        /// <summary>
144        /// オリジナルのオブジェクトサイズ(カスケードの学習対象)
145        /// </summary>
146#else
147        /// <summary>
148        /// Original object size (the cascade is trained for)
149        /// </summary>
150#endif
151        public CvSize OrigWindowSize
152        {
153            get { return _data.orig_window_size; }
154        }
155#if LANG_JP
156        /// <summary>
157        /// 現在のオブジェクトサイズ
158        /// </summary>
159#else
160        /// <summary>
161        /// Current object size
162        /// </summary>
163#endif
164        public CvSize RealWindowSize
165        {
166            get { return _data.real_window_size; }
167        }
168#if LANG_JP
169        /// <summary>
170        /// 現在のスケール
171        /// </summary>
172#else
173        /// <summary>
174        /// Current scale
175        /// </summary>
176#endif
177        public double Scale
178        {
179            get { return _data.scale; }
180        }
181#if LANG_JP
182        /// <summary>
183        /// 段階分類器の配列
184        /// </summary>
185#else
186        /// <summary>
187        /// Array of stage classifiers
188        /// </summary>
189#endif
190        public CvHaarStageClassifier[] StageClassifier
191        {
192            get
193            {
194                int length = _data.count;
195                CvHaarStageClassifier[] result = new CvHaarStageClassifier[length];
196                for (int i = 0; i < length; i++)
197                {
198                    result[i] = new CvHaarStageClassifier(_data.stage_classifier_at(i));
199                }
200                return result;
201            }
202        }
203#if LANG_JP
204        /// <summary>
205        /// cvSetImagesForHaarClassifierCascade によって生成されるカスケードの,隠れ最適表現
206        /// </summary>
207#else
208        /// <summary>
209        /// Hidden optimized representation of the cascade, created by cvSetImagesForHaarClassifierCascade
210        /// </summary>
211#endif
212        public IntPtr HidCascade
213        {
214            get { return _data.hid_cascade; }
215        }
216
217        #endregion
218
219
220        #region メソッド
221        #region HaarDetectObjects
222        /// <summary>
223        /// 与えられた画像からオブジェクトを含む様な矩形領域を検出し,それらの領域を矩形の列として返す.
224        /// </summary>
225        /// <param name="image">この画像の中からオブジェクトを検出する</param>
226        /// <param name="storage">オブジェクト候補の矩形が得られた場合に,その矩形列を保存するメモリストレージ</param>
227        /// <returns>CvRectを要素とするCvSeq</returns>
228        public CvSeq HaarDetectObjects(CvArr image, CvMemStorage storage)
229        {
230            return Cv.HaarDetectObjects(image, this, storage);
231        }
232        /// <summary>
233        /// 与えられた画像からオブジェクトを含む様な矩形領域を検出し,それらの領域を矩形の列として返す.
234        /// </summary>
235        /// <param name="image">この画像の中からオブジェクトを検出する</param>
236        /// <param name="storage">オブジェクト候補の矩形が得られた場合に,その矩形列を保存するメモリストレージ</param>
237        /// <param name="scale_factor">スキャン毎に探索ウィンドウがスケーリングされる際のスケールファクタ. 例えばこの値が 1.1 ならば,ウィンドウが 10% 大きくなる</param>
238        /// <returns>CvRectを要素とするCvSeq</returns>
239        public CvSeq HaarDetectObjects(CvArr image, CvMemStorage storage, double scale_factor)
240        {
241            return Cv.HaarDetectObjects(image, this, storage, scale_factor);
242        }
243        /// <summary>
244        /// 与えられた画像からオブジェクトを含む様な矩形領域を検出し,それらの領域を矩形の列として返す.
245        /// </summary>
246        /// <param name="image">この画像の中からオブジェクトを検出する</param>
247        /// <param name="storage">オブジェクト候補の矩形が得られた場合に,その矩形列を保存するメモリストレージ</param>
248        /// <param name="scale_factor">スキャン毎に探索ウィンドウがスケーリングされる際のスケールファクタ. 例えばこの値が 1.1 ならば,ウィンドウが 10% 大きくなる</param>
249        /// <param name="min_neighbors">(これから 1 を引いた値が)オブジェクトを構成する近傍矩形の最小数となる. min_neighbors-1 よりも少ない矩形しか含まないようなグループは全て棄却される. もし min_neighbors が 0 である場合,この関数はグループを一つも生成せず,候補となる矩形を全て返す.これはユーザがカスタマイズしたグループ化処理を適用したい場合に有用である. </param>
250        /// <returns>CvRectを要素とするCvSeq</returns>
251        public CvSeq HaarDetectObjects(CvArr image, CvMemStorage storage, double scale_factor, int min_neighbors)
252        {
253            return Cv.HaarDetectObjects(image, this, storage, scale_factor, min_neighbors);
254        }
255        /// <summary>
256        /// 与えられた画像からオブジェクトを含む様な矩形領域を検出し,それらの領域を矩形の列として返す.
257        /// </summary>
258        /// <param name="image">この画像の中からオブジェクトを検出する</param>
259        /// <param name="storage">オブジェクト候補の矩形が得られた場合に,その矩形列を保存するメモリストレージ</param>
260        /// <param name="scale_factor">スキャン毎に探索ウィンドウがスケーリングされる際のスケールファクタ. 例えばこの値が 1.1 ならば,ウィンドウが 10% 大きくなる</param>
261        /// <param name="min_neighbors">(これから 1 を引いた値が)オブジェクトを構成する近傍矩形の最小数となる. min_neighbors-1 よりも少ない矩形しか含まないようなグループは全て棄却される. もし min_neighbors が 0 である場合,この関数はグループを一つも生成せず,候補となる矩形を全て返す.これはユーザがカスタマイズしたグループ化処理を適用したい場合に有用である. </param>
262        /// <param name="flags">処理モード</param>
263        /// <returns>CvRectを要素とするCvSeq</returns>
264        public CvSeq HaarDetectObjects(CvArr image, CvMemStorage storage, double scale_factor, int min_neighbors, HaarDetectionType flags)
265        {
266            return Cv.HaarDetectObjects(image, this, storage, scale_factor, min_neighbors, flags);
267        }
268        /// <summary>
269        /// 与えられた画像からオブジェクトを含む様な矩形領域を検出し,それらの領域を矩形の列として返す.
270        /// </summary>
271        /// <param name="image">この画像の中からオブジェクトを検出する</param>
272        /// <param name="storage">オブジェクト候補の矩形が得られた場合に,その矩形列を保存するメモリストレージ</param>
273        /// <param name="scale_factor">スキャン毎に探索ウィンドウがスケーリングされる際のスケールファクタ. 例えばこの値が 1.1 ならば,ウィンドウが 10% 大きくなる</param>
274        /// <param name="min_neighbors">(これから 1 を引いた値が)オブジェクトを構成する近傍矩形の最小数となる. min_neighbors-1 よりも少ない矩形しか含まないようなグループは全て棄却される. もし min_neighbors が 0 である場合,この関数はグループを一つも生成せず,候補となる矩形を全て返す.これはユーザがカスタマイズしたグループ化処理を適用したい場合に有用である. </param>
275        /// <param name="flags">処理モード</param>
276        /// <param name="min_size">最小ウィンドウサイズ.デフォルトでは分類器の学習に用いられたサンプルのサイズが設定される(顔検出の場合は,~20×20).</param>
277        /// <returns>CvRectを要素とするCvSeq</returns>
278        public CvSeq HaarDetectObjects(CvArr image, CvMemStorage storage, double scale_factor, int min_neighbors, HaarDetectionType flags, CvSize min_size)
279        {
280            return Cv.HaarDetectObjects(image, this, storage, scale_factor, min_neighbors, flags, min_size);
281        }
282        #endregion
283        #region Run
284            /// <summary>
285            /// ブーストされた分類器のカスケードを,与えられた画像位置で実行する (cvRunHaarClassifierCascade相当)
286            /// </summary>
287            /// <param name="pt">解析する領域の左上の角</param>
288            /// <returns>分析対象の領域が全ての分類器ステージを通過した場合(これは候補の一つになる)はtrue,そうでなければfalse.</returns>
289            public bool Run( CvPoint pt )
290            {
291                    return Cv.RunHaarClassifierCascade(this, pt);
292            }
293            /// <summary>
294            /// ブーストされた分類器のカスケードを,与えられた画像位置で実行する (cvRunHaarClassifierCascade相当)
295            /// </summary>
296            /// <param name="pt">解析する領域の左上の角</param>
297            /// <param name="start_stage">0から始まるインデックスで,カスケードステージをどこ から開始するかを決定する</param>
298            /// <returns>分析対象の領域が全ての分類器ステージを通過した場合(これは候補の一つになる)はtrue,そうでなければfalse.</returns>
299            public bool Run( CvPoint pt, bool start_stage )
300            {
301                    return Cv.RunHaarClassifierCascade(this, pt, start_stage);
302            }
303            #endregion
304            #region SetImages
305            /// <summary>
306            /// 画像を隠れ分類器カスケードに割り当てる (cvSetImagesForHaarClassifierCascade相当).
307            /// </summary>
308            /// <param name="sum">32 ビット整数シングルチャンネルのインテグラルイメージ.</param>
309            /// <param name="sqsum">64ビット浮動小数点型のシングルチャンネル画像の各ピクセルを二乗した値に対するインテグラルイメージ.</param>
310            /// <param name="tilted_sum">32 ビット整数型のシングルチャンネル画像を 45°傾けたものに対するインテグラルイメージ.</param>
311            /// <param name="scale">カスケードのウィンドウスケール</param>
312            public void SetImages( CvArr sum, CvArr sqsum, CvArr tilted_sum, double scale )
313            {
314                    Cv.SetImagesForHaarClassifierCascade(this, sum, sqsum, tilted_sum, scale);
315            }
316            #endregion
317        #endregion
318    }
319}
Note: See TracBrowser for help on using the browser.