root/lang/cpluspluscli/OpenCvSharp/trunk/OpenCvSharp/CvHistogram.cpp @ 19756

Revision 19756, 20.0 kB (checked in by schima, 6 years ago)

manage配列 -> native配列への変換の際、pin_ptrを用いるよう変更。

Line 
1/**
2 * (C) 2008 Schima
3 * This code is licenced under the LGPL.
4 */
5
6#include "StdAfx.h"
7#include "CvHistogram.h"
8#include "OpenCV.h"
9
10//typedef struct CvHistogram __CvHistogram;
11
12using namespace System;
13using namespace System::IO;
14using namespace System::Runtime::InteropServices;
15
16namespace KwsmLab {
17namespace OpenCvSharp
18{
19        #pragma region ������
20        /// <summary>
21        /// ����        /// </summary>
22        /// <param name="dims">�q�X�g�O�����e�����̃T�C�Y����z��aram>
23        /// <param name="type">�q�X�g�O�����\���t�H�[�}�b�g</param>
24        CvHistogram::CvHistogram( array<Int32>^ dims, HistogramFormat type )
25        {
26                CHECK_NULL(dims);
27                pin_ptr<int> sizes_ptr = &dims[0];
28                this->ptr = ::cvCreateHist(dims->Length, sizes_ptr, (int)type);
29                this->isDisposed = false;
30                this->type = type;
31        }
32        /// <summary>
33        /// ����        /// </summary>
34        /// <param name="dims">�q�X�g�O�����e�����̃T�C�Y����z��aram>
35        /// <param name="type">�q�X�g�O�����\���t�H�[�}�b�g</param>
36        /// <param name="ranges">�q�X�g�O�����̃r���ibin�j�i�l������z����̃p�����[�^�̈Ӗ��̓p�����[�^uniform�Ɉˑ����Ă���
37        /// ���̃����W�́C�q�X�g�O������Z�������܂��ǂ̃q�X�g�O�����̃r��������̂ǂ̒l���̃f�[�^�v�f�ɑΉ����邩��߂邽�߂̃o�b�N�v���W�F�N�V�����ŗp������
38        /// null �̏ꍇ�́C�ォ���� cvSetHistBinRanges ����Č��肳��</param>
39        CvHistogram::CvHistogram( array<Int32>^ dims, HistogramFormat type, array<array<Single>^>^ ranges )
40        {
41                CHECK_NULL(dims);
42                pin_ptr<int> sizes_ptr = &dims[0];
43                this->ptr = ::cvCreateHist(dims->Length, sizes_ptr, (int)type, NULL);
44                if(ranges != nullptr){
45                        SetBinRanges(ranges);
46                }
47                this->isDisposed = false;
48                this->type = type;
49        }
50        /// <summary>
51        /// ����        /// </summary>
52        /// <param name="dims">�q�X�g�O�����e�����̃T�C�Y����z��aram>
53        /// <param name="type">�q�X�g�O�����\���t�H�[�}�b�g</param>
54        /// <param name="ranges">�q�X�g�O�����̃r���ibin�j�i�l������z����̃p�����[�^�̈Ӗ��̓p�����[�^uniform�Ɉˑ����Ă���
55        /// ���̃����W�́C�q�X�g�O������Z�������܂��ǂ̃q�X�g�O�����̃r��������̂ǂ̒l���̃f�[�^�v�f�ɑΉ����邩��߂邽�߂̃o�b�N�v���W�F�N�V�����ŗp������
56        /// null �̏ꍇ�́C�ォ���� cvSetHistBinRanges ����Č��肳��</param>
57        /// <param name="uniform">�����Ɋւ������O�D���ꍇ�C�q�X�g�O�����͓��Ԋu�̃r������C 0&lt;=i&lt;dims �͈̔͂�anges[i] �́C
58        /// ���ꂼ��Ԗڂ̎����̃q�X�g�O�����̉��ʂƏ��̋��E���2�‚̒l������������e�q�X�g�O�����̃r���ɂ‚��āC
59        /// i�Ԗڂ̓�v���l�̃����W��߂邽�߂ɁC[lower, upper]�ŕ\�����S�����W�́C sizes[i]�‚ɓ��������������D
60        /// false�̏ꍇ�Cranges�z���Ԗڂ̗v�f�́Clower0, upper0, lower1, upper1 == lower2, ..., uppersizes[i]-1�Ƃ���sizes[i]+1 �‚̗v�f��D
61        /// �����ŁClowerj , upperj���Ԗڂ̃r���ɑ΂���Ԗڂ̓�v���l�̏㉺�̋��E��ꂼ�����D���̃t���O��false�ł��낤�ƂȂ��낤�ƁC
62        /// �q�X�g�O�����̃r���̎w�肳�ꂽ�͈͂�������ȓ�́CcvCalcHist �ł̓J�E���g���ꂸ�CcvCalcBackProject �ł��Ŗ��������D</param>
63        CvHistogram::CvHistogram( array<Int32>^ dims, HistogramFormat type, array<array<Single>^>^ ranges, Boolean uniform )
64        {
65                CHECK_NULL(dims);
66                pin_ptr<int> sizes_ptr = &dims[0];
67                this->ptr = ::cvCreateHist(dims->Length, sizes_ptr, (int)type, NULL, uniform?1:0);
68                if(ranges != nullptr){
69                        SetBinRanges(ranges, uniform);
70                }
71                this->isDisposed = false;
72                this->type = type;
73        }
74        /// <summary>
75        /// �|�C���^�ŏ���       /// </summary>
76        /// <param name="ptr">struct CvMemStorage*</param>
77        CvHistogram::CvHistogram( __CvHistogram* ptr )
78        {
79                CHECK_NULL(ptr);
80                this->ptr = ptr;
81                this->isDisposed = false;
82        }
83
84        /// <summary>
85        /// �t�@�C�i���C�U
86        /// </summary>
87        CvHistogram::!CvHistogram(void)
88        {
89                Release();
90        }
91        /// <summary>
92        /// ��
93        /// </summary>
94        CvHistogram::~CvHistogram(void)
95        {       
96                Release();
97        }
98        /// <summary>
99        /// ���\�[�X�̉�
100        /// </summary>
101        void CvHistogram::Release(void)
102        {
103                if(!isDisposed){
104                        __CvHistogram* _ptr = this->ptr;
105                        ::cvReleaseHist(&_ptr);
106                        isDisposed = true;
107                }
108        };
109        #pragma endregion
110
111        #pragma region ���\�b�h
112        #pragma region CalcArr
113        /// <summary>
114        /// 1�‚̔z��q�X�g�O������Z����cvCalcArrHist����).
115        /// �q�X�g�O�����̃r���𑝉�i�C���N�������g�j���邽�߂ɗp�������v���̊e�v�f�́C �Ή������͉摜�Q�̓����ꏊ����������.
116        /// </summary>
117        /// <param name="arr">���aram>
118        void CvHistogram::CalcArr( N::CvArr^ arr )
119        {
120                OpenCV::cvCalcArrHist(arr, this);
121        }
122        /// <summary>
123        /// 1�‚̔z��q�X�g�O������Z����cvCalcArrHist����).
124        /// �q�X�g�O�����̃r���𑝉�i�C���N�������g�j���邽�߂ɗp�������v���̊e�v�f�́C �Ή������͉摜�Q�̓����ꏊ����������.
125        /// </summary>
126        /// <param name="arr">���aram>
127        /// <param name="accumulate">�v�Z�t���O�D�Z�b�g�����������́C�q�X�g�O�����͏����O�ɂ͍ŏ��ɃN���A�������D ���̓���ɂ��C���[�U�������̉摜�������q�X�g�O����������鎖���I�����C���Ńq�X�g�O������V���鎖���”\�ł���</param>
128        void CvHistogram::CalcArr( N::CvArr^ arr, Int32 accumulate )
129        {
130                OpenCV::cvCalcArrHist(arr, this, accumulate);
131        }
132        /// <summary>
133        /// 1�‚̔z��q�X�g�O������Z����cvCalcArrHist����).
134        /// �q�X�g�O�����̃r���𑝉�i�C���N�������g�j���邽�߂ɗp�������v���̊e�v�f�́C �Ή������͉摜�Q�̓����ꏊ����������.
135        /// </summary>
136        /// <param name="arr">���aram>
137        /// <param name="accumulate">�v�Z�t���O�D�Z�b�g�����������́C�q�X�g�O�����͏����O�ɂ͍ŏ��ɃN���A�������D ���̓���ɂ��C���[�U�������̉摜�������q�X�g�O����������鎖���I�����C���Ńq�X�g�O������V���鎖���”\�ł���</param>
138        /// <param name="mask">�����}�X�N�D������̂ǂ̃s�N�Z����E���g���邩��肷��/param>
139        void CvHistogram::CalcArr( N::CvArr^ arr, Int32 accumulate, N::CvArr^ mask )
140        {
141                OpenCV::cvCalcArrHist(arr, this, accumulate, mask);
142        }
143        /// <summary>
144        /// �z��̃q�X�g�O������Z����cvCalcArrHist����).
145        /// �q�X�g�O�����̃r���𑝉�i�C���N�������g�j���邽�߂ɗp�������v���̊e�v�f�́C �Ή������͉摜�Q�̓����ꏊ����������.
146        /// </summary>
147        /// <param name="arr">���D�S�ē����T�C�Y�E�^�C�v�D</param>
148        void CvHistogram::CalcArr( array<N::CvArr^>^ arr )
149        {
150                OpenCV::cvCalcArrHist(arr, this);
151        }
152        /// <summary>
153        /// �z��̃q�X�g�O������Z����cvCalcArrHist����).
154        /// �q�X�g�O�����̃r���𑝉�i�C���N�������g�j���邽�߂ɗp�������v���̊e�v�f�́C �Ή������͉摜�Q�̓����ꏊ����������.
155        /// </summary>
156        /// <param name="arr">���D�S�ē����T�C�Y�E�^�C�v�D</param>
157        /// <param name="accumulate">�v�Z�t���O�D�Z�b�g�����������́C�q�X�g�O�����͏����O�ɂ͍ŏ��ɃN���A�������D ���̓���ɂ��C���[�U�������̉摜�������q�X�g�O����������鎖���I�����C���Ńq�X�g�O������V���鎖���”\�ł���</param>
158        void CvHistogram::CalcArr( array<N::CvArr^>^ arr, Int32 accumulate )
159        {
160                OpenCV::cvCalcArrHist(arr, this, accumulate);
161        }
162        /// <summary>
163        /// �z��̃q�X�g�O������Z����cvCalcArrHist����).
164        /// �q�X�g�O�����̃r���𑝉�i�C���N�������g�j���邽�߂ɗp�������v���̊e�v�f�́C �Ή������͉摜�Q�̓����ꏊ����������.
165        /// </summary>
166        /// <param name="arr">���D�S�ē����T�C�Y�E�^�C�v�D</param>
167        /// <param name="accumulate">�v�Z�t���O�D�Z�b�g�����������́C�q�X�g�O�����͏����O�ɂ͍ŏ��ɃN���A�������D ���̓���ɂ��C���[�U�������̉摜�������q�X�g�O����������鎖���I�����C���Ńq�X�g�O������V���鎖���”\�ł���</param>
168        /// <param name="mask">�����}�X�N�D������̂ǂ̃s�N�Z����E���g���邩��肷��/param>
169        void CvHistogram::CalcArr( array<N::CvArr^>^ arr, Int32 accumulate, N::CvArr^ mask )
170        {
171                OpenCV::cvCalcArrHist(arr, this, accumulate, mask);
172        }
173        #pragma endregion
174        #pragma region Calc
175        /// <summary>
176        /// 1�‚̉摜�̃q�X�g�O������Z����cvCalcHist����).
177        /// �q�X�g�O�����̃r���𑝉�i�C���N�������g�j���邽�߂ɗp�������v���̊e�v�f�́C �Ή������͉摜�Q�̓����ꏊ����������.
178        /// </summary>
179        /// <param name="image">���</param>
180        void CvHistogram::Calc( N::IplImage^ image )
181        {
182                OpenCV::cvCalcHist(image, this);
183        }
184        /// <summary>
185        /// 1�‚̉摜�̃q�X�g�O������Z����cvCalcHist����).
186        /// �q�X�g�O�����̃r���𑝉�i�C���N�������g�j���邽�߂ɗp�������v���̊e�v�f�́C �Ή������͉摜�Q�̓����ꏊ����������.
187        /// </summary>
188        /// <param name="image">���</param>
189        /// <param name="accumulate">�v�Z�t���O�D�Z�b�g�����������́C�q�X�g�O�����͏����O�ɂ͍ŏ��ɃN���A�������D ���̓���ɂ��C���[�U�������̉摜�������q�X�g�O����������鎖���I�����C���Ńq�X�g�O������V���鎖���”\�ł���</param>
190        void CvHistogram::Calc( N::IplImage^ image, Int32 accumulate )
191        {
192                OpenCV::cvCalcHist(image, this, accumulate);
193        }
194        /// <summary>
195        /// 1�‚̉摜�̃q�X�g�O������Z����cvCalcHist����).
196        /// �q�X�g�O�����̃r���𑝉�i�C���N�������g�j���邽�߂ɗp�������v���̊e�v�f�́C �Ή������͉摜�Q�̓����ꏊ����������.
197        /// </summary>
198        /// <param name="image">���</param>
199        /// <param name="accumulate">�v�Z�t���O�D�Z�b�g�����������́C�q�X�g�O�����͏����O�ɂ͍ŏ��ɃN���A�������D ���̓���ɂ��C���[�U�������̉摜�������q�X�g�O����������鎖���I�����C���Ńq�X�g�O������V���鎖���”\�ł���</param>
200        /// <param name="mask">�����}�X�N�D������̂ǂ̃s�N�Z����E���g���邩��肷��/param>
201        void CvHistogram::Calc( N::IplImage^ image, Int32 accumulate, N::CvArr^ mask )
202        {
203                OpenCV::cvCalcHist(image, this, accumulate, mask);
204        }
205        /// <summary>
206        /// �摜�Q�̃q�X�g�O������Z����cvCalcHist����).
207        /// �q�X�g�O�����̃r���𑝉�i�C���N�������g�j���邽�߂ɗp�������v���̊e�v�f�́C �Ή������͉摜�Q�̓����ꏊ����������.
208        /// </summary>
209        /// <param name="image">����Q�D�S�ē����T�C�Y�E�^�C�v�D</param>
210        void CvHistogram::Calc( array<N::IplImage^>^ image )
211        {
212                OpenCV::cvCalcHist(image, this);
213        }
214        /// <summary>
215        /// �摜�Q�̃q�X�g�O������Z����cvCalcHist����).
216        /// �q�X�g�O�����̃r���𑝉�i�C���N�������g�j���邽�߂ɗp�������v���̊e�v�f�́C �Ή������͉摜�Q�̓����ꏊ����������.
217        /// </summary>
218        /// <param name="image">����Q�D�S�ē����T�C�Y�E�^�C�v�D</param>
219        /// <param name="accumulate">�v�Z�t���O�D�Z�b�g�����������́C�q�X�g�O�����͏����O�ɂ͍ŏ��ɃN���A�������D ���̓���ɂ��C���[�U�������̉摜�������q�X�g�O����������鎖���I�����C���Ńq�X�g�O������V���鎖���”\�ł���</param>
220        void CvHistogram::Calc( array<N::IplImage^>^ image, Int32 accumulate)
221        {
222                OpenCV::cvCalcHist(image, this, accumulate);
223        }
224        /// <summary>
225        /// �摜�Q�̃q�X�g�O������Z����cvCalcHist����).
226        /// �q�X�g�O�����̃r���𑝉�i�C���N�������g�j���邽�߂ɗp�������v���̊e�v�f�́C �Ή������͉摜�Q�̓����ꏊ����������.
227        /// </summary>
228        /// <param name="image">����Q�D�S�ē����T�C�Y�E�^�C�v�D</param>
229        /// <param name="accumulate">�v�Z�t���O�D�Z�b�g�����������́C�q�X�g�O�����͏����O�ɂ͍ŏ��ɃN���A�������D ���̓���ɂ��C���[�U�������̉摜�������q�X�g�O����������鎖���I�����C���Ńq�X�g�O������V���鎖���”\�ł���</param>
230        /// <param name="mask">�����}�X�N�D������̂ǂ̃s�N�Z����E���g���邩��肷��/param>
231        void CvHistogram::Calc( array<N::IplImage^>^ image, Int32 accumulate, N::CvArr^ mask )
232        {
233                OpenCV::cvCalcHist(image, this, accumulate, mask);
234        }
235        #pragma endregion
236        #pragma region Clear
237        /// <summary>
238        /// �q�X�g�O��������A����cvClearHist����).
239        /// ���ȃq�X�g�O�����̏ꍇ�C�S�Ẵq�X�g�O�����̃r�����Z�b�g���� �܂��a�ȃq�X�g�O�����̏ꍇ�́C���ׂẴq�X�g�O�����̃r���������
240        /// </summary>
241        void CvHistogram::Clear( void )
242        {
243                ::cvClearHist(ptr);
244        }
245        #pragma endregion
246        #pragma region Compare
247        /// <summary>
248        /// 2�‚̖��ȃq�X�g�O������r����cvCompareHist����).
249        /// �a�ȃq�X�g�O�����C���邢�͏d�ݕt�����ꂽ�_���W�܂���悤�ȁC�����I�ȍ\����r���邽�߂ɂ́C�֐�cvCalcEMD2 ��������ǂ��ꍇ����
250        /// </summary>
251        /// <param name="hist">���Ώۂ̖��ȃq�X�g�O����</param>
252        /// <param name="method">����</param>
253        Double CvHistogram::Compare( N::CvHistogram^ hist, HistogramComparison method )
254        {
255                CHECK_NULL(hist);
256                return ::cvCompareHist(ptr, hist->Ptr, (int)method);
257        }
258        #pragma endregion
259        #pragma region GetValue*D
260        /// <summary>
261        /// 1�����q�X�g�O�����̎w�肳�ꂽ�r���ւ̃|�C���^��� (cvGetHistValue_1D)�D
262        /// �a�ȃq�X�g�O�����̏ꍇ�ŁC���������݂��Ă������ȊO�́C���̊֐����V�����r��������C0�ɃZ�b�g����
263        /// </summary>
264        /// <param name="idx0">�v�f�C���f�b�N�X�́C0����Ƃ���������D</param>
265        /// <returns>�w�肵���v�f�̃|�C���^</returns>
266        Single* CvHistogram::GetValue1D( Int32 idx0 )
267        {
268                return (float*)::cvPtr1D(ptr->bins, idx0);
269        }
270        /// <summary>
271        /// 2�����q�X�g�O�����̎w�肳�ꂽ�r���ւ̃|�C���^��� (cvGetHistValue_2D)�D
272        /// �a�ȃq�X�g�O�����̏ꍇ�ŁC���������݂��Ă������ȊO�́C���̊֐����V�����r��������C0�ɃZ�b�g����
273        /// </summary>
274        /// <param name="idx0">�v�f�C���f�b�N�X�́C0����Ƃ���������D</param>
275        /// <param name="idx1">�v�f�C���f�b�N�X�́C0����Ƃ���������D</param>
276        /// <returns>�w�肵���v�f�̃|�C���^</returns>
277        Single* CvHistogram::GetValue2D( Int32 idx0, Int32 idx1 )
278        {
279                return (float*)::cvPtr2D(ptr->bins, idx0, idx1);
280        }
281        /// <summary>
282        /// 3�����q�X�g�O�����̎w�肳�ꂽ�r���ւ̃|�C���^��� (cvGetHistValue_3D)�D
283        /// �a�ȃq�X�g�O�����̏ꍇ�ŁC���������݂��Ă������ȊO�́C���̊֐����V�����r��������C0�ɃZ�b�g����
284        /// </summary>
285        /// <param name="idx0">�v�f�C���f�b�N�X�́C0����Ƃ���������D</param>
286        /// <param name="idx1">�v�f�C���f�b�N�X�́C0����Ƃ���������D</param>
287        /// <param name="idx2">�v�f�C���f�b�N�X�́C0����Ƃ���������D</param>
288        /// <returns>�w�肵���v�f�̃|�C���^</returns>
289        Single* CvHistogram::GetValue3D( Int32 idx0, Int32 idx1, Int32 idx2 )
290        {
291                return (float*)::cvPtr3D(ptr->bins, idx0, idx1, idx2);
292        }
293        /// <summary>
294        /// n�����q�X�g�O�����̎w�肳�ꂽ�r���ւ̃|�C���^��� (cvGetHistValue_nD)�D
295        /// �a�ȃq�X�g�O�����̏ꍇ�ŁC���������݂��Ă������ȊO�́C���̊֐����V�����r��������C0�ɃZ�b�g����
296        /// </summary>
297        /// <param name="idx">�v�f�C���f�b�N�X�̔z���ϒ���/param>
298        /// <returns>�w�肵���v�f�̃|�C���^</returns>
299        Single* CvHistogram::GetValueND( ... array<Int32>^ idx )
300        {
301                pin_ptr<int> idx_ptr = &idx[0];
302                return (Single*)::cvPtrND(ptr->bins, idx_ptr);
303        }
304        #pragma endregion
305        #pragma region GetMinMaxValue
306        /// <summary>
307        /// �q�X�g�O�����̃r���̍ŏ��l/�ő���߂�cvGetMinMaxHistValue����)�D
308        /// �����l�̍ő������l���������݂������C�������ɕ�ׂ��Ƃ��ɍł����ɂȂ����f�b�N�X���Ԃ����D
309        /// </summary>
310        /// <param name="min_value">�q�X�g�O�����̍ŏ��l�̏o��/param>
311        /// <param name="max_value">�q�X�g�O�����̍ő��̏o��/param>
312        void CvHistogram::GetMinMaxValue( [Out] Single% min_value, [Out] Single% max_value )
313        {
314                OpenCV::cvGetMinMaxHistValue(this, min_value, max_value);
315        }
316        /// <summary>
317        /// �q�X�g�O�����̃r���̍ŏ��l/�ő��Ƃ����̏ꏊ��߂�cvGetMinMaxHistValue����)�D
318        /// �����l�̍ő������l���������݂������C�������ɕ�ׂ��Ƃ��ɍł����ɂȂ����f�b�N�X���Ԃ����D
319        /// </summary>
320        /// <param name="min_value">�q�X�g�O�����̍ŏ��l�̏o��/param>
321        /// <param name="max_value">�q�X�g�O�����̍ő��̏o��/param>
322        /// <param name="min_idx">�ŏ��l�̔z�񒆂̃C���f�b�N�X�̏o��/param>
323        /// <param name="max_idx">�ő��̔z�񒆂̃C���f�b�N�X�̏o��/param>
324        void CvHistogram::GetMinMaxValue( [Out] Single% min_value, [Out] Single% max_value, [Out] Int32% min_idx, [Out] Int32% max_idx )
325        {
326                OpenCV::cvGetMinMaxHistValue(this, min_value, max_value, min_idx, max_idx);
327        }
328        #pragma endregion       
329        #pragma region Normalize
330        /// <summary>
331        /// �q�X�g�O�����̐��K����� (cvNormalizeHist).
332        /// �r���̒l�̍��v�� factor �ɓ������Ȃ����ɃX�P�[�����O���鎖�ŁC�q�X�g�O�����̃r���𐳋K������
333        /// </summary>
334        /// <param name="factor">���K���W��</param>
335        void CvHistogram::Normalize( Double factor )
336        {
337                ::cvNormalizeHist(ptr, factor);
338        }
339        #pragma endregion
340        #pragma region QueryValue*D
341        /// <summary>
342        /// 1�����q�X�g�O�����̎w�肳�ꂽ�r���̒l��� (cvQueryHistValue_1D����)�D
343        /// �a�ȃq�X�g�O�����̏ꍇ�ŁC���������݂��Ă������ȊO�́C���̊֐����V�����r��������C0�ɃZ�b�g����
344        /// </summary>
345        /// <param name="idx0">�v�f�C���f�b�N�X�́C0����Ƃ���������D</param>
346        /// <returns>�w�肵���v�f�̒l</returns>
347        Double CvHistogram::QueryValue1D( Int32 idx0 )
348        {
349                return ::cvGetReal1D(ptr->bins, idx0);
350        }
351        /// <summary>
352        /// 2�����q�X�g�O�����̎w�肳�ꂽ�r���̒l��� (cvQueryHistValue_2D����)�D
353        /// �a�ȃq�X�g�O�����̏ꍇ�ŁC���������݂��Ă������ȊO�́C���̊֐����V�����r��������C0�ɃZ�b�g����
354        /// </summary>
355        /// <param name="idx0">�v�f�C���f�b�N�X�́C0����Ƃ���������D</param>
356        /// <param name="idx1">�v�f�C���f�b�N�X�́C0����Ƃ���������D</param>
357        /// <returns>�w�肵���v�f�̒l</returns>
358        Double CvHistogram::QueryValue2D( Int32 idx0, Int32 idx1 )
359        {
360                return ::cvGetReal2D(ptr->bins, idx0, idx1);
361        }
362        /// <summary>
363        /// 3�����q�X�g�O�����̎w�肳�ꂽ�r���̒l��� (cvQueryHistValue_3D����)�D
364        /// �a�ȃq�X�g�O�����̏ꍇ�ŁC���������݂��Ă������ȊO�́C���̊֐����V�����r��������C0�ɃZ�b�g����
365        /// </summary>
366        /// <param name="idx0">�v�f�C���f�b�N�X�́C0����Ƃ���������D</param>
367        /// <param name="idx1">�v�f�C���f�b�N�X�́C0����Ƃ���������D</param>
368        /// <param name="idx2">�v�f�C���f�b�N�X�́C0����Ƃ���������D</param>
369        /// <returns>�w�肵���v�f�̒l</returns>
370        Double CvHistogram::QueryValue3D( Int32 idx0, Int32 idx1, Int32 idx2 )
371        {
372                return ::cvGetReal3D(ptr->bins, idx0, idx1, idx2);
373        }
374        /// <summary>
375        /// n�����q�X�g�O�����̎w�肳�ꂽ�r���̒l��� (cvQueryHistValue_nD����)�D
376        /// �a�ȃq�X�g�O�����̏ꍇ�ŁC���������݂��Ă������ȊO�́C���̊֐����V�����r��������C0�ɃZ�b�g����
377        /// </summary>
378        /// <param name="idx">�v�f�C���f�b�N�X�̔z���ϒ���/param>
379        /// <returns>�w�肵���v�f�̒l</returns>
380        Double CvHistogram::QueryValueND( ... array<Int32>^ idx )
381        {
382                pin_ptr<int> idx_ptr = &idx[0];
383                return ::cvGetRealND(ptr->bins, idx_ptr);
384        }
385        #pragma endregion
386        #pragma region SetBinRanges
387        /// <summary>
388        /// �q�X�g�O�����̃r���̃����W��b�g����cvSetHistBinRanges����).
389        /// ���̊֐��ł̓����W�̏����”\�ł���
390        /// �q�X�g�O�����̃r���̃����W�́C�q�X�g�O�������b�N�v���W�F�N�V�����̌v�Z�O�ɃZ�b�g���Ă����Ȃ����Ȃ����D
391        /// </summary>
392        /// <param name="ranges">�r���̃����W�̔z��aram>
393        void CvHistogram::SetBinRanges( array<array<Single>^>^ ranges )
394        {
395                CHECK_NULL(ranges);
396                float **ranges_ptr = new float*[ranges->Length];
397                for(int i=0; i<ranges->Length; i++){
398                        CHECK_NULL(ranges[i]);
399                        ranges_ptr[i] = new float[ranges[i]->Length];
400                        for(int j=0; j<ranges[i]->Length; j++){
401                                ranges_ptr[i][j] = ranges[i][j];
402                        }
403                }
404                ::cvSetHistBinRanges(ptr, ranges_ptr);
405                if(ranges_ptr != NULL){
406                        for(int i=0; i<ranges->Length; i++){
407                                delete[] ranges_ptr[i];
408                        }               
409                        delete[] ranges_ptr;
410                }
411        }
412        /// <summary>
413        /// �q�X�g�O�����̃r���̃����W��b�g����cvSetHistBinRanges����).
414        /// ���̊֐��ł̓����W�̏����”\�ł���
415        /// �q�X�g�O�����̃r���̃����W�́C�q�X�g�O�������b�N�v���W�F�N�V�����̌v�Z�O�ɃZ�b�g���Ă����Ȃ����Ȃ����D
416        /// </summary>
417        /// <param name="ranges">�r���̃����W�̔z��aram>
418        /// <param name="uniform">�����t���O</param>
419        void CvHistogram::SetBinRanges( array<array<Single>^>^ ranges, Boolean uniform )
420        {
421                CHECK_NULL(ranges);
422                float **ranges_ptr = new float*[ranges->Length];
423                for(int i=0; i<ranges->Length; i++){
424                        CHECK_NULL(ranges[i]);
425                        ranges_ptr[i] = new float[ranges[i]->Length];
426                        for(int j=0; j<ranges[i]->Length; j++){
427                                ranges_ptr[i][j] = ranges[i][j];
428                        }
429                }
430                ::cvSetHistBinRanges(ptr, ranges_ptr, uniform?1:0);
431                if(ranges_ptr != NULL){
432                        for(int i=0; i<ranges->Length; i++){
433                                delete[] ranges_ptr[i];
434                        }               
435                        delete[] ranges_ptr;
436                }
437        }
438        #pragma endregion
439        #pragma region Thresh
440        /// <summary>
441        /// �q�X�g�O��������l������� (cvThreshHist����).
442        /// �w�肵��臒l�ȉ��̃q�X�g�O�����̃r������A����
443        /// </summary>
444        /// <param name="threshold">臒l���x��</param>
445        void CvHistogram::Thresh( Double threshold )
446        {
447                ::cvThreshHist(ptr, threshold);
448        }
449        #pragma endregion
450        #pragma endregion
451}
452}
Note: See TracBrowser for help on using the browser.