bantic-ruby-opencv 0.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (118) hide show
  1. data/CHANGELOG +2 -0
  2. data/License.txt +30 -0
  3. data/README.rdoc +90 -0
  4. data/Rakefile +15 -0
  5. data/examples/convexhull.rb +47 -0
  6. data/examples/face_detect.rb +24 -0
  7. data/examples/houghcircle.rb +23 -0
  8. data/examples/inpaint.png +0 -0
  9. data/examples/inpaint.rb +42 -0
  10. data/examples/paint.rb +71 -0
  11. data/examples/snake.rb +42 -0
  12. data/examples/stuff.jpg +0 -0
  13. data/ext/curve.cpp +103 -0
  14. data/ext/curve.h +34 -0
  15. data/ext/cvavgcomp.cpp +67 -0
  16. data/ext/cvavgcomp.h +39 -0
  17. data/ext/cvbox2d.cpp +114 -0
  18. data/ext/cvbox2d.h +53 -0
  19. data/ext/cvcapture.cpp +276 -0
  20. data/ext/cvcapture.h +54 -0
  21. data/ext/cvchain.cpp +184 -0
  22. data/ext/cvchain.h +43 -0
  23. data/ext/cvchaincode.cpp +49 -0
  24. data/ext/cvchaincode.h +43 -0
  25. data/ext/cvcircle32f.cpp +90 -0
  26. data/ext/cvcircle32f.h +53 -0
  27. data/ext/cvcondensation.cpp +230 -0
  28. data/ext/cvcondensation.h +49 -0
  29. data/ext/cvconnectedcomp.cpp +115 -0
  30. data/ext/cvconnectedcomp.h +46 -0
  31. data/ext/cvcontour.cpp +217 -0
  32. data/ext/cvcontour.h +47 -0
  33. data/ext/cvcontourtree.cpp +86 -0
  34. data/ext/cvcontourtree.h +41 -0
  35. data/ext/cvconvexitydefect.cpp +103 -0
  36. data/ext/cvconvexitydefect.h +42 -0
  37. data/ext/cverror.cpp +140 -0
  38. data/ext/cverror.h +79 -0
  39. data/ext/cvfont.cpp +173 -0
  40. data/ext/cvfont.h +56 -0
  41. data/ext/cvhaarclassifiercascade.cpp +159 -0
  42. data/ext/cvhaarclassifiercascade.h +41 -0
  43. data/ext/cvhistogram.cpp +200 -0
  44. data/ext/cvhistogram.h +51 -0
  45. data/ext/cvindex.cpp +73 -0
  46. data/ext/cvindex.h +40 -0
  47. data/ext/cvline.cpp +106 -0
  48. data/ext/cvline.h +52 -0
  49. data/ext/cvmat.cpp +4809 -0
  50. data/ext/cvmat.h +286 -0
  51. data/ext/cvmatnd.cpp +44 -0
  52. data/ext/cvmatnd.h +28 -0
  53. data/ext/cvmemstorage.cpp +64 -0
  54. data/ext/cvmemstorage.h +53 -0
  55. data/ext/cvmoments.cpp +204 -0
  56. data/ext/cvmoments.h +48 -0
  57. data/ext/cvpoint.cpp +229 -0
  58. data/ext/cvpoint.h +59 -0
  59. data/ext/cvpoint2d32f.cpp +213 -0
  60. data/ext/cvpoint2d32f.h +61 -0
  61. data/ext/cvpoint3d32f.cpp +245 -0
  62. data/ext/cvpoint3d32f.h +64 -0
  63. data/ext/cvrect.cpp +340 -0
  64. data/ext/cvrect.h +79 -0
  65. data/ext/cvscalar.cpp +227 -0
  66. data/ext/cvscalar.h +63 -0
  67. data/ext/cvseq.cpp +583 -0
  68. data/ext/cvseq.h +71 -0
  69. data/ext/cvset.cpp +63 -0
  70. data/ext/cvset.h +39 -0
  71. data/ext/cvsize.cpp +223 -0
  72. data/ext/cvsize.h +63 -0
  73. data/ext/cvsize2d32f.cpp +180 -0
  74. data/ext/cvsize2d32f.h +59 -0
  75. data/ext/cvslice.cpp +82 -0
  76. data/ext/cvslice.h +53 -0
  77. data/ext/cvsparsemat.cpp +44 -0
  78. data/ext/cvsparsemat.h +28 -0
  79. data/ext/cvtermcriteria.cpp +183 -0
  80. data/ext/cvtermcriteria.h +71 -0
  81. data/ext/cvtwopoints.cpp +98 -0
  82. data/ext/cvtwopoints.h +50 -0
  83. data/ext/cvvector.cpp +206 -0
  84. data/ext/cvvector.h +54 -0
  85. data/ext/cvvideowriter.cpp +116 -0
  86. data/ext/cvvideowriter.h +41 -0
  87. data/ext/extconf.rb +58 -0
  88. data/ext/gui.cpp +65 -0
  89. data/ext/gui.h +33 -0
  90. data/ext/iplconvkernel.cpp +177 -0
  91. data/ext/iplconvkernel.h +52 -0
  92. data/ext/iplimage.cpp +238 -0
  93. data/ext/iplimage.h +54 -0
  94. data/ext/mouseevent.cpp +184 -0
  95. data/ext/mouseevent.h +59 -0
  96. data/ext/opencv.cpp +481 -0
  97. data/ext/opencv.h +356 -0
  98. data/ext/point3dset.cpp +41 -0
  99. data/ext/point3dset.h +31 -0
  100. data/ext/pointset.cpp +238 -0
  101. data/ext/pointset.h +69 -0
  102. data/ext/trackbar.cpp +122 -0
  103. data/ext/trackbar.h +65 -0
  104. data/ext/window.cpp +368 -0
  105. data/ext/window.h +56 -0
  106. data/images/CvMat_sobel.png +0 -0
  107. data/images/CvMat_sub_rect.png +0 -0
  108. data/images/CvSeq_relationmap.png +0 -0
  109. data/images/face_detect_from_lena.jpg +0 -0
  110. data/lib/opencv.rb +3 -0
  111. data/lib/version.rb +3 -0
  112. data/metadata +191 -0
  113. data/ruby-opencv.gemspec +33 -0
  114. data/setup/setup.cygwin.rb +120 -0
  115. data/setup/setup.mingw.rb +99 -0
  116. data/setup/setup.mswin32.rb +103 -0
  117. data/test/test_opencv.rb +6 -0
  118. metadata +272 -0
@@ -0,0 +1,54 @@
1
+ /************************************************************
2
+
3
+ cvcapture.h -
4
+
5
+ $Author: lsxi $
6
+
7
+ Copyright (C) 2005-2006 Masakazu Yonekura
8
+
9
+ ************************************************************/
10
+ #ifndef RUBY_OPENCV_CVCAPTURE_H
11
+ #define RUBY_OPENCV_CVCAPTURE_H
12
+
13
+ #include "opencv.h"
14
+
15
+ #define __NAMESPACE_BEGIN_CVCAPTURE namespace cCvCapture{
16
+ #define __NAMESPACE_END_CVCAPTURE }
17
+
18
+ __NAMESPACE_BEGIN_OPENCV
19
+ __NAMESPACE_BEGIN_CVCAPTURE
20
+
21
+
22
+ VALUE rb_class();
23
+
24
+ void define_ruby_class();
25
+
26
+ void free(void *ptr);
27
+ VALUE rb_open(int argc, VALUE *argv, VALUE klass);
28
+
29
+ VALUE rb_grab(VALUE self);
30
+ VALUE rb_retrieve(VALUE self);
31
+ VALUE rb_query(VALUE self);
32
+
33
+ VALUE rb_millisecond(VALUE self);
34
+ VALUE rb_frames(VALUE self);
35
+ VALUE rb_avi_ratio(VALUE self);
36
+ VALUE rb_size(VALUE self);
37
+ VALUE rb_width(VALUE self);
38
+ VALUE rb_height(VALUE self);
39
+ VALUE rb_fps(VALUE self);
40
+ VALUE rb_fourcc(VALUE self);
41
+ VALUE rb_frame_count(VALUE self);
42
+
43
+ __NAMESPACE_END_CVCAPTURE
44
+
45
+
46
+ inline CvCapture *CVCAPTURE(VALUE object){
47
+ CvCapture *ptr;
48
+ Data_Get_Struct(object, CvCapture, ptr);
49
+ return ptr;
50
+ }
51
+
52
+ __NAMESPACE_END_OPENCV
53
+
54
+ #endif // RUBY_OPENCV_CVCAPTURE_H
@@ -0,0 +1,184 @@
1
+ /************************************************************
2
+
3
+ cvchain.cpp -
4
+
5
+ $Author: lsxi $
6
+
7
+ Copyright (C) 2007 Masakazu Yonekura
8
+
9
+ ************************************************************/
10
+ #include "cvchain.h"
11
+ /*
12
+ * Document-class: OpenCV::CvChain
13
+ *
14
+ * Freeman chain code.
15
+ * CvMat#find_contours(:method => :code)
16
+ */
17
+ __NAMESPACE_BEGIN_OPENCV
18
+ __NAMESPACE_BEGIN_CVCHAIN
19
+
20
+ #define APPROX_CHAIN_OPTION(op) NIL_P(op) ? rb_const_get(rb_class(), rb_intern("APPROX_CHAIN_OPTION")) : rb_funcall(rb_const_get(rb_class(), rb_intern("APPROX_CHAIN_OPTION")), rb_intern("merge"), 1, op)
21
+ #define APPROX_CHAIN_METHOD(op) CVMETHOD("APPROX_CHAIN_METHOD", rb_hash_aref(op, ID2SYM(rb_intern("method"))), CV_CHAIN_APPROX_SIMPLE)
22
+ #define APPROX_CHAIN_PARAMETER(op) NUM2INT(rb_hash_aref(op, ID2SYM(rb_intern("parameter"))))
23
+ #define APPROX_CHAIN_MINIMAL_PARAMETER(op) NUM2INT(rb_hash_aref(op, ID2SYM(rb_intern("minimal_parameter"))))
24
+ #define APPROX_CHAIN_RECURSIVE(op) ({VALUE _recursive = rb_hash_aref(op, ID2SYM(rb_intern("recursive"))); NIL_P(_recursive) ? 0 : _recursive == Qfalse ? 0 : 1;})
25
+
26
+ VALUE rb_klass;
27
+
28
+ VALUE
29
+ rb_class()
30
+ {
31
+ return rb_klass;
32
+ }
33
+
34
+ void
35
+ define_ruby_class()
36
+ {
37
+ if (rb_klass)
38
+ return;
39
+ /*
40
+ * opencv = rb_define_module("OpenCV");
41
+ * cvseq = rb_define_class_under(opencv, "CvSeq");
42
+ * curve = rb_define_module_under(opencv, "Curve");
43
+ * note: this comment is used by rdoc.
44
+ */
45
+ VALUE opencv = rb_module_opencv();
46
+ VALUE cvseq = cCvSeq::rb_class();
47
+ VALUE curve = mCurve::rb_module();
48
+
49
+ rb_klass = rb_define_class_under(opencv, "CvChain", cvseq);
50
+ rb_include_module(rb_klass, curve);
51
+ VALUE approx_chain_option = rb_hash_new();
52
+ rb_define_const(rb_klass, "APPROX_CHAIN_OPTION", approx_chain_option);
53
+ rb_hash_aset(approx_chain_option, ID2SYM(rb_intern("method")), ID2SYM(rb_intern("approx_simple")));
54
+ rb_hash_aset(approx_chain_option, ID2SYM(rb_intern("parameter")), rb_float_new(0));
55
+ rb_hash_aset(approx_chain_option, ID2SYM(rb_intern("minimal_parameter")), INT2FIX(0));
56
+ rb_hash_aset(approx_chain_option, ID2SYM(rb_intern("recursive")), Qfalse);
57
+
58
+ rb_define_method(rb_klass, "origin", RUBY_METHOD_FUNC(rb_origin), 0);
59
+ rb_define_method(rb_klass, "origin=", RUBY_METHOD_FUNC(rb_set_origin), 0);
60
+ rb_define_method(rb_klass, "codes", RUBY_METHOD_FUNC(rb_codes), 0);
61
+ rb_define_method(rb_klass, "points", RUBY_METHOD_FUNC(rb_points), 0);
62
+ rb_define_method(rb_klass, "approx_chain", RUBY_METHOD_FUNC(rb_approx_chain), -1);
63
+ rb_define_alias(rb_klass, "approx", "approx_chain");
64
+ }
65
+
66
+ /*
67
+ * call-seq:
68
+ * origin -> cvpoint
69
+ *
70
+ * Return Freeman chain code origin.
71
+ */
72
+ VALUE
73
+ rb_origin(VALUE self)
74
+ {
75
+ return cCvPoint::new_object(CVCHAIN(self)->origin);
76
+ }
77
+
78
+ /*
79
+ * call-seq:
80
+ * origin = point -> self
81
+ *
82
+ * Set Freeman chain code origin.
83
+ */
84
+ VALUE
85
+ rb_set_origin(VALUE self, VALUE origin)
86
+ {
87
+ CVCHAIN(self)->origin = VALUE_TO_CVPOINT(origin);
88
+ return self;
89
+ }
90
+
91
+ /*
92
+ * call-seq:
93
+ * codes -> array(contain fixnum)
94
+ *
95
+ * Return Freeman chain codes.
96
+ */
97
+ VALUE
98
+ rb_codes(VALUE self)
99
+ {
100
+ CvChain *chain = CVCHAIN(self);
101
+ CvChainPtReader reader;
102
+ CvPoint p = chain->origin;
103
+ VALUE ary = rb_ary_new2(chain->total);
104
+ cvStartReadChainPoints(chain, &reader);
105
+ for (int i = 0; i < chain->total; i++) {
106
+ CV_READ_SEQ_ELEM(reader.code, (*((CvSeqReader*)&(reader))));
107
+ rb_ary_store(ary, i, CHR2FIX(reader.code));
108
+ }
109
+ return ary;
110
+ }
111
+
112
+ /*
113
+ * call-seq:
114
+ * points -> array(contain cvpoint)
115
+ *
116
+ * Return points that represent by Freeman chain code.
117
+ */
118
+ VALUE
119
+ rb_points(VALUE self)
120
+ {
121
+ CvChain *chain = CVCHAIN(self);
122
+ CvChainPtReader reader;
123
+ CvPoint p = chain->origin;
124
+ VALUE ary = rb_ary_new2(chain->total);
125
+ cvStartReadChainPoints(chain, &reader);
126
+ for (int i = 0; i < chain->total; i++) {
127
+ CV_READ_CHAIN_POINT(p, reader);
128
+ rb_ary_store(ary, i, cCvPoint::new_object(p));
129
+ }
130
+ return ary;
131
+ }
132
+
133
+ /*
134
+ * call-seq:
135
+ * approx_chain(<i>[approx_chain_option]</i>) -> cvcontour
136
+ *
137
+ * Approximates Freeman chain(s) with polygonal curve.
138
+ * <i>approx_chain_option</i> should be Hash include these keys.
139
+ * :method - Approximation method.
140
+ * :approx_none - translate all the points from the chain code into points;
141
+ * :approx_simple(default) - compress horizontal, vertical, and diagonal segments, that is,
142
+ * the function leaves only their ending points.
143
+ * :approx_tc89_l1
144
+ * :approx_tc89_kcos - apply one of the flavors of Teh-Chin chain approximation algorithm.
145
+ * If set the difference between the current pixel and seed pixel is considered,
146
+ * otherwise difference between neighbor pixels is considered (the range is floating).
147
+ * :parameter - Method parameter (not used now).
148
+ * :minimal_perimeter (default 0)
149
+ * Approximates only those contours whose perimeters are not less than minimal_perimeter. Other chains are removed from the resulting structure.
150
+ * :recursive (default false)
151
+ * If not nil or false, the function approximates all chains that access can be obtained to
152
+ * from self by h_next or v_next links. If 0, the single chain is approximated.
153
+ *
154
+ */
155
+ VALUE
156
+ rb_approx_chain(int argc, VALUE *argv, VALUE self)
157
+ {
158
+ VALUE approx_chain_option, storage;
159
+ rb_scan_args(argc, argv, "01", &approx_chain_option);
160
+ approx_chain_option = APPROX_CHAIN_OPTION(approx_chain_option);
161
+ /* can't compile VC
162
+ storage = cCvMemStorage::new_object();
163
+ CvSeq *seq = cvApproxChains(CVSEQ(self), CVMEMSTORAGE(storage),
164
+ APPROX_CHAIN_METHOD(approx_chain_option),
165
+ APPROX_CHAIN_PARAMETER(approx_chain_option),
166
+ APPROX_CHAIN_MINIMAL_PARAMETER(approx_chain_option),
167
+ APPROX_CHAIN_RECURSIVE(approx_chain_option));
168
+
169
+ return cCvSeq::new_sequence(cCvContour::rb_class(), seq, cCvPoint::rb_class(), storage);
170
+ */
171
+ return Qnil;
172
+ }
173
+
174
+ VALUE
175
+ new_object()
176
+ {
177
+ VALUE storage = cCvMemStorage::new_object();
178
+ CvSeq *seq = cvCreateSeq(CV_SEQ_CHAIN_CONTOUR, sizeof(CvChain), sizeof(CvChainCode), CVMEMSTORAGE(storage));
179
+ VALUE object = cCvSeq::new_sequence(cCvChain::rb_class(), seq, cCvChainCode::rb_class(), storage);
180
+ return object;
181
+ }
182
+
183
+ __NAMESPACE_END_CVCHAIN
184
+ __NAMESPACE_END_OPENCV
@@ -0,0 +1,43 @@
1
+ /************************************************************
2
+
3
+ cvchain.h -
4
+
5
+ $Author: lsxi $
6
+
7
+ Copyright (C) 2007 Masakazu Yonekura
8
+
9
+ ************************************************************/
10
+ #ifndef RUBY_OPENCV_CVCHAIN_H
11
+ #define RUBY_OPENCV_CVCHAIN_H
12
+ #include "opencv.h"
13
+
14
+ #define __NAMESPACE_BEGIN_CVCHAIN namespace cCvChain{
15
+ #define __NAMESPACE_END_CVCHAIN }
16
+
17
+ __NAMESPACE_BEGIN_OPENCV
18
+ __NAMESPACE_BEGIN_CVCHAIN
19
+
20
+ VALUE rb_class();
21
+
22
+ void define_ruby_class();
23
+
24
+ VALUE rb_origin(VALUE self);
25
+ VALUE rb_set_origin(VALUE self, VALUE origin);
26
+ VALUE rb_codes(VALUE self);
27
+ VALUE rb_points(VALUE self);
28
+ VALUE rb_approx_chain(int argc, VALUE *argv, VALUE self);
29
+
30
+ VALUE new_object();
31
+
32
+ __NAMESPACE_END_CVCHAIN
33
+
34
+ inline CvChain*
35
+ CVCHAIN(VALUE object){
36
+ CvChain *ptr;
37
+ Data_Get_Struct(object, CvChain, ptr);
38
+ return ptr;
39
+ }
40
+
41
+ __NAMESPACE_END_OPENCV
42
+
43
+ #endif // RUBY_OPENCV_CVCHAIN_H
@@ -0,0 +1,49 @@
1
+ /************************************************************
2
+
3
+ cvchaincode.cpp -
4
+
5
+ $Author: lsxi $
6
+
7
+ Copyright (C) 2007 Masakazu Yonekura
8
+
9
+ ************************************************************/
10
+ #include "cvchaincode.h"
11
+ /*
12
+ * Document-class: OpenCV::CvChainCode
13
+ *
14
+ * Freeman chain code.
15
+ */
16
+ __NAMESPACE_BEGIN_OPENCV
17
+ __NAMESPACE_BEGIN_CVCHAINCODE
18
+
19
+ VALUE rb_klass;
20
+
21
+ VALUE
22
+ rb_class()
23
+ {
24
+ return rb_klass;
25
+ }
26
+
27
+ void
28
+ define_ruby_class()
29
+ {
30
+ if (rb_klass)
31
+ return;
32
+ /*
33
+ * opencv = rb_define_module("OpenCV");
34
+ *
35
+ * note: this comment is used by rdoc.
36
+ */
37
+ VALUE opencv = rb_module_opencv();
38
+
39
+ rb_klass = rb_define_class_under(opencv, "CvChainCode", rb_cObject);
40
+ }
41
+
42
+ VALUE
43
+ rb_to_i(VALUE self)
44
+ {
45
+ return CHR2FIX(CVCHAINCODE(self)->code);
46
+ }
47
+
48
+ __NAMESPACE_END_CVCHAINCODE
49
+ __NAMESPACE_END_OPENCV
@@ -0,0 +1,43 @@
1
+ /************************************************************
2
+
3
+ opchaincode.h -
4
+
5
+ $Author: lsxi $
6
+
7
+ Copyright (C) 2008 Masakazu Yonekura
8
+
9
+ ************************************************************/
10
+ #ifndef RUBY_OPENCV_CVCHAINCODE_H
11
+ #define RUBY_OPENCV_CVCHAINCODE_H
12
+
13
+ #include "opencv.h"
14
+
15
+ #define __NAMESPACE_BEGIN_CVCHAINCODE namespace cCvChainCode{
16
+ #define __NAMESPACE_END_CVCHAINCODE }
17
+
18
+ typedef struct CvChainCode{
19
+ char code;
20
+ }CvChainCode;
21
+
22
+ __NAMESPACE_BEGIN_OPENCV
23
+ __NAMESPACE_BEGIN_CVCHAINCODE
24
+
25
+ VALUE rb_class();
26
+
27
+ void define_ruby_class();
28
+
29
+ VALUE rb_to_i(VALUE self);
30
+
31
+ __NAMESPACE_END_CVCHAINCODE
32
+
33
+ inline CvChainCode*
34
+ CVCHAINCODE(VALUE object){
35
+ CvChainCode *ptr;
36
+ Data_Get_Struct(object, CvChainCode, ptr);
37
+ return ptr;
38
+ }
39
+
40
+
41
+ __NAMESPACE_END_OPENCV
42
+
43
+ #endif // RUBY_OPENCV_CVCHAINCODE_H
@@ -0,0 +1,90 @@
1
+ /************************************************************
2
+
3
+ cvcircle32f.cpp -
4
+
5
+ $Author: lsxi $
6
+
7
+ Copyright (C) 2005-2006 Masakazu Yonekura
8
+
9
+ ************************************************************/
10
+ #include "cvcircle32f.h"
11
+ /*
12
+ * Document-class: OpenCV::CvCircle32f
13
+ *
14
+ * Combination of center and radius.
15
+ *
16
+ * see CvMat#hough_circles
17
+ */
18
+ __NAMESPACE_BEGIN_OPENCV
19
+ __NAMESPACE_BEGIN_CVCIRCLE32F
20
+
21
+ VALUE rb_klass;
22
+
23
+ VALUE
24
+ rb_class()
25
+ {
26
+ return rb_klass;
27
+ }
28
+
29
+ void
30
+ define_ruby_class()
31
+ {
32
+ if (rb_klass)
33
+ return;
34
+ /*
35
+ * opencv = rb_define_module("OpenCV");
36
+ *
37
+ * note: this comment is used by rdoc.
38
+ */
39
+ VALUE opencv = rb_module_opencv();
40
+
41
+ rb_klass = rb_define_class_under(opencv, "CvCircle32f", rb_cObject);
42
+ rb_define_alloc_func(rb_klass, rb_allocate);
43
+ rb_define_method(rb_klass, "center", RUBY_METHOD_FUNC(rb_center), 0);
44
+ rb_define_method(rb_klass, "radius", RUBY_METHOD_FUNC(rb_radius), 0);
45
+
46
+ //rb_define_method(rb_klass, "to_s", RUBY_METHOD_FUNC(rb_to_s), 0);
47
+ rb_define_method(rb_klass, "to_ary", RUBY_METHOD_FUNC(rb_to_ary), 0);
48
+ }
49
+
50
+ VALUE
51
+ rb_allocate(VALUE klass)
52
+ {
53
+ CvCircle32f *ptr;
54
+ return Data_Make_Struct(klass, CvCircle32f, 0, -1, ptr);
55
+ }
56
+
57
+ /*
58
+ * Return parameter on center.
59
+ */
60
+ VALUE
61
+ rb_center(VALUE self)
62
+ {
63
+ return cCvPoint2D32f::new_object(CVCIRCLE32F(self)->center);
64
+ }
65
+
66
+ /*
67
+ * Return parameter on radius.
68
+ */
69
+ VALUE
70
+ rb_radius(VALUE self)
71
+ {
72
+ return rb_float_new(CVCIRCLE32F(self)->radius);
73
+ }
74
+
75
+ VALUE
76
+ rb_to_ary(VALUE self)
77
+ {
78
+ return rb_ary_new3(2, rb_center(self), rb_radius(self));
79
+ }
80
+
81
+ VALUE
82
+ new_object(CvCircle32f circle32f)
83
+ {
84
+ VALUE object = rb_allocate(rb_klass);
85
+ *CVCIRCLE32F(object) = circle32f;
86
+ return object;
87
+ }
88
+
89
+ __NAMESPACE_END_CVCIRCLE32F
90
+ __NAMESPACE_END_OPENCV