bonanza-ruby-opencv 0.0.13.20140330211753

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 (240) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +28 -0
  3. data/.yardopts +3 -0
  4. data/DEVELOPERS_NOTE.md +137 -0
  5. data/Gemfile +9 -0
  6. data/History.txt +5 -0
  7. data/License.txt +30 -0
  8. data/Manifest.txt +239 -0
  9. data/README.md +98 -0
  10. data/Rakefile +99 -0
  11. data/config.yml +7 -0
  12. data/examples/alpha_blend.rb +21 -0
  13. data/examples/contours/bitmap-contours-with-labels.png +0 -0
  14. data/examples/contours/bitmap-contours.png +0 -0
  15. data/examples/contours/bounding-box-detect-canny.rb +62 -0
  16. data/examples/contours/contour_retrieval_modes.rb +139 -0
  17. data/examples/contours/rotated-boxes.jpg +0 -0
  18. data/examples/convexhull.rb +47 -0
  19. data/examples/face_detect.rb +20 -0
  20. data/examples/facerec/create_csv.rb +43 -0
  21. data/examples/facerec/facerec_eigenfaces.rb +132 -0
  22. data/examples/facerec/facerec_fisherfaces.rb +131 -0
  23. data/examples/facerec/facerec_lbph.rb +116 -0
  24. data/examples/facerec/readme.md +111 -0
  25. data/examples/find_obj.rb +169 -0
  26. data/examples/houghcircle.rb +22 -0
  27. data/examples/images/box.png +0 -0
  28. data/examples/images/box_in_scene.png +0 -0
  29. data/examples/images/inpaint.png +0 -0
  30. data/examples/images/lena-256x256.jpg +0 -0
  31. data/examples/images/lena-eyes.jpg +0 -0
  32. data/examples/images/lenna-rotated.jpg +0 -0
  33. data/examples/images/lenna.jpg +0 -0
  34. data/examples/images/stuff.jpg +0 -0
  35. data/examples/images/tiffany.jpg +0 -0
  36. data/examples/inpaint.rb +57 -0
  37. data/examples/match_kdtree.rb +88 -0
  38. data/examples/match_template.rb +26 -0
  39. data/examples/paint.rb +70 -0
  40. data/examples/snake.rb +43 -0
  41. data/ext/opencv/algorithm.cpp +291 -0
  42. data/ext/opencv/algorithm.h +38 -0
  43. data/ext/opencv/curve.cpp +127 -0
  44. data/ext/opencv/curve.h +34 -0
  45. data/ext/opencv/cvavgcomp.cpp +64 -0
  46. data/ext/opencv/cvavgcomp.h +39 -0
  47. data/ext/opencv/cvbox2d.cpp +195 -0
  48. data/ext/opencv/cvbox2d.h +61 -0
  49. data/ext/opencv/cvcapture.cpp +607 -0
  50. data/ext/opencv/cvcapture.h +72 -0
  51. data/ext/opencv/cvchain.cpp +233 -0
  52. data/ext/opencv/cvchain.h +46 -0
  53. data/ext/opencv/cvcircle32f.cpp +126 -0
  54. data/ext/opencv/cvcircle32f.h +52 -0
  55. data/ext/opencv/cvconnectedcomp.cpp +156 -0
  56. data/ext/opencv/cvconnectedcomp.h +49 -0
  57. data/ext/opencv/cvcontour.cpp +332 -0
  58. data/ext/opencv/cvcontour.h +48 -0
  59. data/ext/opencv/cvcontourtree.cpp +96 -0
  60. data/ext/opencv/cvcontourtree.h +41 -0
  61. data/ext/opencv/cvconvexitydefect.cpp +92 -0
  62. data/ext/opencv/cvconvexitydefect.h +42 -0
  63. data/ext/opencv/cverror.cpp +115 -0
  64. data/ext/opencv/cverror.h +28 -0
  65. data/ext/opencv/cvfeaturetree.cpp +123 -0
  66. data/ext/opencv/cvfeaturetree.h +55 -0
  67. data/ext/opencv/cvfont.cpp +228 -0
  68. data/ext/opencv/cvfont.h +64 -0
  69. data/ext/opencv/cvhaarclassifiercascade.cpp +148 -0
  70. data/ext/opencv/cvhaarclassifiercascade.h +39 -0
  71. data/ext/opencv/cvhistogram.cpp +715 -0
  72. data/ext/opencv/cvhistogram.h +73 -0
  73. data/ext/opencv/cvhumoments.cpp +178 -0
  74. data/ext/opencv/cvhumoments.h +51 -0
  75. data/ext/opencv/cvline.cpp +159 -0
  76. data/ext/opencv/cvline.h +54 -0
  77. data/ext/opencv/cvmat.cpp +6829 -0
  78. data/ext/opencv/cvmat.h +323 -0
  79. data/ext/opencv/cvmemstorage.cpp +73 -0
  80. data/ext/opencv/cvmemstorage.h +53 -0
  81. data/ext/opencv/cvmoments.cpp +293 -0
  82. data/ext/opencv/cvmoments.h +75 -0
  83. data/ext/opencv/cvpoint.cpp +265 -0
  84. data/ext/opencv/cvpoint.h +67 -0
  85. data/ext/opencv/cvpoint2d32f.cpp +216 -0
  86. data/ext/opencv/cvpoint2d32f.h +63 -0
  87. data/ext/opencv/cvpoint3d32f.cpp +252 -0
  88. data/ext/opencv/cvpoint3d32f.h +66 -0
  89. data/ext/opencv/cvrect.cpp +441 -0
  90. data/ext/opencv/cvrect.h +88 -0
  91. data/ext/opencv/cvscalar.cpp +301 -0
  92. data/ext/opencv/cvscalar.h +76 -0
  93. data/ext/opencv/cvseq.cpp +605 -0
  94. data/ext/opencv/cvseq.h +74 -0
  95. data/ext/opencv/cvsize.cpp +227 -0
  96. data/ext/opencv/cvsize.h +65 -0
  97. data/ext/opencv/cvsize2d32f.cpp +215 -0
  98. data/ext/opencv/cvsize2d32f.h +64 -0
  99. data/ext/opencv/cvslice.cpp +126 -0
  100. data/ext/opencv/cvslice.h +61 -0
  101. data/ext/opencv/cvsurfparams.cpp +208 -0
  102. data/ext/opencv/cvsurfparams.h +58 -0
  103. data/ext/opencv/cvsurfpoint.cpp +279 -0
  104. data/ext/opencv/cvsurfpoint.h +54 -0
  105. data/ext/opencv/cvtermcriteria.cpp +198 -0
  106. data/ext/opencv/cvtermcriteria.h +71 -0
  107. data/ext/opencv/cvtwopoints.cpp +122 -0
  108. data/ext/opencv/cvtwopoints.h +51 -0
  109. data/ext/opencv/cvutils.cpp +221 -0
  110. data/ext/opencv/cvutils.h +31 -0
  111. data/ext/opencv/cvvideowriter.cpp +142 -0
  112. data/ext/opencv/cvvideowriter.h +43 -0
  113. data/ext/opencv/eigenfaces.cpp +75 -0
  114. data/ext/opencv/eigenfaces.h +30 -0
  115. data/ext/opencv/extconf.rb +82 -0
  116. data/ext/opencv/facerecognizer.cpp +181 -0
  117. data/ext/opencv/facerecognizer.h +46 -0
  118. data/ext/opencv/fisherfaces.cpp +75 -0
  119. data/ext/opencv/fisherfaces.h +30 -0
  120. data/ext/opencv/gui.cpp +71 -0
  121. data/ext/opencv/gui.h +30 -0
  122. data/ext/opencv/iplconvkernel.cpp +198 -0
  123. data/ext/opencv/iplconvkernel.h +71 -0
  124. data/ext/opencv/iplimage.cpp +666 -0
  125. data/ext/opencv/iplimage.h +75 -0
  126. data/ext/opencv/lbph.cpp +78 -0
  127. data/ext/opencv/lbph.h +30 -0
  128. data/ext/opencv/mouseevent.cpp +186 -0
  129. data/ext/opencv/mouseevent.h +56 -0
  130. data/ext/opencv/opencv.cpp +833 -0
  131. data/ext/opencv/opencv.h +405 -0
  132. data/ext/opencv/pointset.cpp +280 -0
  133. data/ext/opencv/pointset.h +68 -0
  134. data/ext/opencv/trackbar.cpp +127 -0
  135. data/ext/opencv/trackbar.h +69 -0
  136. data/ext/opencv/window.cpp +377 -0
  137. data/ext/opencv/window.h +66 -0
  138. data/images/CvMat_sobel.png +0 -0
  139. data/images/CvMat_sub_rect.png +0 -0
  140. data/images/CvSeq_relationmap.png +0 -0
  141. data/lib/opencv.rb +12 -0
  142. data/lib/opencv/psyched_yaml.rb +22 -0
  143. data/lib/opencv/version.rb +4 -0
  144. data/test/eigenfaces_save.xml +7524 -0
  145. data/test/fisherfaces_save.xml +7530 -0
  146. data/test/helper.rb +166 -0
  147. data/test/lbph_save.xml +4304 -0
  148. data/test/runner.rb +30 -0
  149. data/test/samples/airplane.jpg +0 -0
  150. data/test/samples/baboon.jpg +0 -0
  151. data/test/samples/baboon200.jpg +0 -0
  152. data/test/samples/baboon200_rotated.jpg +0 -0
  153. data/test/samples/blank0.jpg +0 -0
  154. data/test/samples/blank1.jpg +0 -0
  155. data/test/samples/blank2.jpg +0 -0
  156. data/test/samples/blank3.jpg +0 -0
  157. data/test/samples/blank4.jpg +0 -0
  158. data/test/samples/blank5.jpg +0 -0
  159. data/test/samples/blank6.jpg +0 -0
  160. data/test/samples/blank7.jpg +0 -0
  161. data/test/samples/blank8.jpg +0 -0
  162. data/test/samples/blank9.jpg +0 -0
  163. data/test/samples/cat.jpg +0 -0
  164. data/test/samples/chessboard.jpg +0 -0
  165. data/test/samples/contours.jpg +0 -0
  166. data/test/samples/fruits.jpg +0 -0
  167. data/test/samples/haarcascade_frontalface_alt.xml.gz +0 -0
  168. data/test/samples/inpaint-mask.bmp +0 -0
  169. data/test/samples/lena-256x256.jpg +0 -0
  170. data/test/samples/lena-32x32.jpg +0 -0
  171. data/test/samples/lena-eyes.jpg +0 -0
  172. data/test/samples/lena-inpaint.jpg +0 -0
  173. data/test/samples/lena.jpg +0 -0
  174. data/test/samples/lines.jpg +0 -0
  175. data/test/samples/messy0.jpg +0 -0
  176. data/test/samples/messy1.jpg +0 -0
  177. data/test/samples/movie_sample.avi +0 -0
  178. data/test/samples/one_way_train_0000.jpg +0 -0
  179. data/test/samples/one_way_train_0001.jpg +0 -0
  180. data/test/samples/partially_blank0.jpg +0 -0
  181. data/test/samples/partially_blank1.jpg +0 -0
  182. data/test/samples/smooth0.jpg +0 -0
  183. data/test/samples/smooth1.jpg +0 -0
  184. data/test/samples/smooth2.jpg +0 -0
  185. data/test/samples/smooth3.jpg +0 -0
  186. data/test/samples/smooth4.jpg +0 -0
  187. data/test/samples/smooth5.jpg +0 -0
  188. data/test/samples/smooth6.jpg +0 -0
  189. data/test/samples/str-cv-rotated.jpg +0 -0
  190. data/test/samples/str-cv.jpg +0 -0
  191. data/test/samples/str-ov.jpg +0 -0
  192. data/test/samples/stuff.jpg +0 -0
  193. data/test/test_curve.rb +43 -0
  194. data/test/test_cvavgcomp.rb +24 -0
  195. data/test/test_cvbox2d.rb +76 -0
  196. data/test/test_cvcapture.rb +183 -0
  197. data/test/test_cvchain.rb +108 -0
  198. data/test/test_cvcircle32f.rb +41 -0
  199. data/test/test_cvconnectedcomp.rb +61 -0
  200. data/test/test_cvcontour.rb +150 -0
  201. data/test/test_cvcontourtree.rb +43 -0
  202. data/test/test_cverror.rb +50 -0
  203. data/test/test_cvfeaturetree.rb +65 -0
  204. data/test/test_cvfont.rb +58 -0
  205. data/test/test_cvhaarclassifiercascade.rb +63 -0
  206. data/test/test_cvhistogram.rb +271 -0
  207. data/test/test_cvhumoments.rb +83 -0
  208. data/test/test_cvline.rb +50 -0
  209. data/test/test_cvmat.rb +3003 -0
  210. data/test/test_cvmat_drawing.rb +349 -0
  211. data/test/test_cvmat_dxt.rb +150 -0
  212. data/test/test_cvmat_imageprocessing.rb +2085 -0
  213. data/test/test_cvmoments.rb +180 -0
  214. data/test/test_cvpoint.rb +75 -0
  215. data/test/test_cvpoint2d32f.rb +75 -0
  216. data/test/test_cvpoint3d32f.rb +93 -0
  217. data/test/test_cvrect.rb +144 -0
  218. data/test/test_cvscalar.rb +113 -0
  219. data/test/test_cvseq.rb +295 -0
  220. data/test/test_cvsize.rb +75 -0
  221. data/test/test_cvsize2d32f.rb +75 -0
  222. data/test/test_cvslice.rb +31 -0
  223. data/test/test_cvsurfparams.rb +57 -0
  224. data/test/test_cvsurfpoint.rb +66 -0
  225. data/test/test_cvtermcriteria.rb +56 -0
  226. data/test/test_cvtwopoints.rb +40 -0
  227. data/test/test_cvvideowriter.rb +58 -0
  228. data/test/test_eigenfaces.rb +93 -0
  229. data/test/test_fisherfaces.rb +93 -0
  230. data/test/test_iplconvkernel.rb +54 -0
  231. data/test/test_iplimage.rb +232 -0
  232. data/test/test_lbph.rb +152 -0
  233. data/test/test_mouseevent.rb +17 -0
  234. data/test/test_opencv.rb +360 -0
  235. data/test/test_pointset.rb +128 -0
  236. data/test/test_preliminary.rb +130 -0
  237. data/test/test_trackbar.rb +47 -0
  238. data/test/test_window.rb +115 -0
  239. data/yard_extension.rb +5 -0
  240. metadata +399 -0
@@ -0,0 +1,74 @@
1
+ /************************************************************
2
+
3
+ cvseq.h -
4
+
5
+ $Author: lsxi $
6
+
7
+ Copyright (C) 2005-2006 Masakazu Yonekura
8
+
9
+ ************************************************************/
10
+ #ifndef RUBY_OPENCV_CVSEQ_H
11
+ #define RUBY_OPENCV_CVSEQ_H
12
+
13
+ #include "opencv.h"
14
+
15
+ #define __NAMESPACE_BEGIN_CVSEQ namespace cCvSeq {
16
+ #define __NAMESPACE_END_CVSEQ }
17
+
18
+ __NAMESPACE_BEGIN_OPENCV
19
+ __NAMESPACE_BEGIN_CVSEQ
20
+
21
+ VALUE rb_class();
22
+ void init_ruby_class();
23
+
24
+ VALUE seqblock_class(void *ptr);
25
+ void register_elem_class(CvSeq *seq, VALUE klass);
26
+ void unregister_elem_class(void *ptr);
27
+
28
+ VALUE rb_allocate(VALUE klass);
29
+
30
+ VALUE rb_initialize(int argc, VALUE *argv, VALUE self);
31
+ VALUE rb_total(VALUE self);
32
+ VALUE rb_empty_q(VALUE self);
33
+ VALUE rb_aref(VALUE self, VALUE index);
34
+ VALUE rb_first(VALUE self);
35
+ VALUE rb_last(VALUE self);
36
+ VALUE rb_h_prev(VALUE self);
37
+ VALUE rb_h_next(VALUE self);
38
+ VALUE rb_v_prev(VALUE self);
39
+ VALUE rb_v_next(VALUE self);
40
+ VALUE rb_push(VALUE self, VALUE args);
41
+ VALUE rb_pop(VALUE self);
42
+ VALUE rb_unshift(VALUE self, VALUE args);
43
+ VALUE rb_shift(VALUE self);
44
+ VALUE rb_each(VALUE self);
45
+ VALUE rb_each_index(VALUE self);
46
+ VALUE rb_insert(VALUE self, VALUE index, VALUE object);
47
+ VALUE rb_remove(VALUE self, VALUE index);
48
+ VALUE rb_clear(VALUE self);
49
+
50
+ VALUE new_object(CvSeq *seq, VALUE klass);
51
+ VALUE new_object(CvSeq *seq, VALUE klass, VALUE storage);
52
+ VALUE new_sequence(VALUE klass, CvSeq *seq, VALUE element_klass, VALUE storage);
53
+
54
+ __NAMESPACE_END_CVSEQ
55
+
56
+ inline CvSeq*
57
+ CVSEQ(VALUE object)
58
+ {
59
+ CvSeq *ptr;
60
+ Data_Get_Struct(object, CvSeq, ptr);
61
+ return ptr;
62
+ }
63
+
64
+ inline CvSeq*
65
+ CVSEQ_WITH_CHECK(VALUE object)
66
+ {
67
+ if (!rb_obj_is_kind_of(object, cCvSeq::rb_class()))
68
+ raise_typeerror(object, cCvSeq::rb_class());
69
+ return CVSEQ(object);
70
+ }
71
+
72
+ __NAMESPACE_END_OPENCV
73
+
74
+ #endif // RUBY_OPENCV_CVSEQ_H
@@ -0,0 +1,227 @@
1
+ /************************************************************
2
+
3
+ cvsize.cpp -
4
+
5
+ $Author: lsxi $
6
+
7
+ Copyright (C) 2005 Masakazu Yonekura
8
+
9
+ ************************************************************/
10
+ #include "cvsize.h"
11
+ /*
12
+ * Document-class: OpenCV::CvSize
13
+ *
14
+ * This class means one size on X axis Y axis.
15
+ * X and Y takes the value of the Fixnum.
16
+ *
17
+ * C structure is here, very simple.
18
+ * typdef struct CvSize {
19
+ * int width;
20
+ * int height;
21
+ * }
22
+ */
23
+ __NAMESPACE_BEGIN_OPENCV
24
+ __NAMESPACE_BEGIN_CVSIZE
25
+
26
+ VALUE rb_klass;
27
+
28
+ VALUE
29
+ rb_class()
30
+ {
31
+ return rb_klass;
32
+ }
33
+
34
+ /*
35
+ * call-seq:
36
+ * compatible?(obj)
37
+ *
38
+ * Return compatibility to CvSize. Return true if object have method #width and #height.
39
+ *
40
+ * For example.
41
+ * class MySize
42
+ * def width
43
+ * 10
44
+ * end
45
+ * def height
46
+ * 20
47
+ * end
48
+ * end
49
+ * mp = MySize.new
50
+ * CvSize.compatible?(mp) #=> true
51
+ * CvSize.new(mp) #=> same as CvSize(10, 20)
52
+ */
53
+ VALUE
54
+ rb_compatible_q(VALUE klass, VALUE object)
55
+ {
56
+ return (rb_respond_to(object, rb_intern("width")) && rb_respond_to(object, rb_intern("height"))) ? Qtrue : Qfalse;
57
+ }
58
+
59
+ VALUE
60
+ rb_allocate(VALUE klass)
61
+ {
62
+ CvSize *ptr;
63
+ return Data_Make_Struct(klass, CvSize, 0, -1, ptr);
64
+ }
65
+
66
+ /*
67
+ * call-seq:
68
+ * new
69
+ * new(obj)
70
+ * new(width, height)
71
+ *
72
+ * Create new size of 2D, (width, height). It is dropped below the decimal point.
73
+ *
74
+ * new() is same as new(0, 0)
75
+ *
76
+ * new(obj) is same as new(obj.x.to_i, obj.y.to_i)
77
+ */
78
+ VALUE
79
+ rb_initialize(int argc, VALUE *argv, VALUE self)
80
+ {
81
+ CvSize *self_ptr = CVSIZE(self);
82
+ switch (argc) {
83
+ case 0:
84
+ break;
85
+ case 1: {
86
+ CvSize size = VALUE_TO_CVSIZE(argv[0]);
87
+ self_ptr->width = size.width;
88
+ self_ptr->height = size.height;
89
+ break;
90
+ }
91
+ case 2:
92
+ self_ptr->width = NUM2INT(argv[0]);
93
+ self_ptr->height = NUM2INT(argv[1]);
94
+ break;
95
+ default:
96
+ rb_raise(rb_eArgError, "wrong number of arguments (%d for 0..2)", argc);
97
+ break;
98
+ }
99
+ return self;
100
+ }
101
+
102
+ /*
103
+ * Return size of x-axis.
104
+ */
105
+ VALUE
106
+ rb_width(VALUE self)
107
+ {
108
+ return INT2NUM(CVSIZE(self)->width);
109
+ }
110
+
111
+ /*
112
+ * call-seq:
113
+ * width = val
114
+ *
115
+ * Set x-axis size, return self.
116
+ * It is dropped below the decimal point.
117
+ */
118
+ VALUE
119
+ rb_set_width(VALUE self, VALUE x)
120
+ {
121
+ CVSIZE(self)->width = NUM2INT(x);
122
+ return self;
123
+ }
124
+
125
+ /*
126
+ * Return size of yaxis.
127
+ */
128
+ VALUE
129
+ rb_height(VALUE self)
130
+ {
131
+ return INT2NUM(CVSIZE(self)->height);
132
+ }
133
+
134
+ /*
135
+ * call-seq:
136
+ * height = val
137
+ *
138
+ * Set y-axis size, return self.
139
+ * It is dropped below the decimal point.
140
+ */
141
+ VALUE
142
+ rb_set_height(VALUE self, VALUE y)
143
+ {
144
+ CVSIZE(self)->height = NUM2INT(y);
145
+ return self;
146
+ }
147
+
148
+ /*
149
+ * call-seq:
150
+ * to_s -> "<OpenCV::CvSize:widthxheight>"
151
+ *
152
+ * Return width and height by String.
153
+ */
154
+ VALUE
155
+ rb_to_s(VALUE self)
156
+ {
157
+ const int i = 4;
158
+ VALUE str[i];
159
+ str[0] = rb_str_new2("<%s:%dx%d>");
160
+ str[1] = rb_str_new2(rb_class2name(CLASS_OF(self)));
161
+ str[2] = rb_width(self);
162
+ str[3] = rb_height(self);
163
+ return rb_f_sprintf(i, str);
164
+ }
165
+
166
+ /*
167
+ * call-seq:
168
+ * to_ary -> [width, height]
169
+ *
170
+ * Return width and height by Array.
171
+ */
172
+ VALUE
173
+ rb_to_ary(VALUE self)
174
+ {
175
+ return rb_ary_new3(2, rb_width(self), rb_height(self));
176
+ }
177
+
178
+ VALUE
179
+ new_object()
180
+ {
181
+ VALUE object = rb_allocate(rb_klass);
182
+ *CVSIZE(object) = cvSize(0, 0);
183
+ return object;
184
+ }
185
+
186
+ VALUE
187
+ new_object(CvSize size)
188
+ {
189
+ VALUE object = rb_allocate(rb_klass);
190
+ *CVSIZE(object) = size;
191
+ return object;
192
+ }
193
+
194
+ void
195
+ init_ruby_class()
196
+ {
197
+ #if 0
198
+ // For documentation using YARD
199
+ VALUE opencv = rb_define_module("OpenCV");
200
+ #endif
201
+
202
+ if (rb_klass)
203
+ return;
204
+ /*
205
+ * opencv = rb_define_module("OpenCV");
206
+ *
207
+ * note: this comment is used by rdoc.
208
+ */
209
+ VALUE opencv = rb_module_opencv();
210
+
211
+ rb_klass = rb_define_class_under(opencv, "CvSize", rb_cObject);
212
+ rb_define_alloc_func(rb_klass, rb_allocate);
213
+ rb_define_singleton_method(rb_klass, "compatible?", RUBY_METHOD_FUNC(rb_compatible_q), 1);
214
+ rb_define_method(rb_klass, "initialize", RUBY_METHOD_FUNC(rb_initialize), -1);
215
+ rb_define_method(rb_klass, "width", RUBY_METHOD_FUNC(rb_width), 0);
216
+ rb_define_method(rb_klass, "width=", RUBY_METHOD_FUNC(rb_set_width), 1);
217
+ rb_define_method(rb_klass, "height", RUBY_METHOD_FUNC(rb_height), 0);
218
+ rb_define_method(rb_klass, "height=", RUBY_METHOD_FUNC(rb_set_height), 1);
219
+
220
+ rb_define_method(rb_klass, "to_s", RUBY_METHOD_FUNC(rb_to_s), 0);
221
+ rb_define_method(rb_klass, "to_ary", RUBY_METHOD_FUNC(rb_to_ary), 0);
222
+ rb_define_alias(rb_klass, "to_a", "to_ary");
223
+ }
224
+
225
+ __NAMESPACE_END_CVSIZE
226
+ __NAMESPACE_END_OPENCV
227
+
@@ -0,0 +1,65 @@
1
+ /************************************************************
2
+
3
+ cvsize.h -
4
+
5
+ $Author: lsxi $
6
+
7
+ Copyright (C) 2005-2006 Masakazu Yonekura
8
+
9
+ ************************************************************/
10
+ #ifndef RUBY_OPENCV_CVSIZE_H
11
+ #define RUBY_OPENCV_CVSIZE_H
12
+
13
+ #include "opencv.h"
14
+
15
+ #define __NAMESPACE_BEGIN_CVSIZE namespace cCvSize {
16
+ #define __NAMESPACE_END_CVSIZE }
17
+
18
+ __NAMESPACE_BEGIN_OPENCV
19
+ __NAMESPACE_BEGIN_CVSIZE
20
+
21
+ VALUE rb_class();
22
+
23
+ void init_ruby_class();
24
+
25
+ VALUE rb_compatible_q(VALUE klass, VALUE object);
26
+
27
+ VALUE rb_allocate(VALUE klass);
28
+ VALUE rb_initialize(int argc, VALUE *argv, VALUE self);
29
+ VALUE rb_width(VALUE self);
30
+ VALUE rb_set_width(VALUE self, VALUE width);
31
+ VALUE rb_height(VALUE self);
32
+ VALUE rb_set_height(VALUE self, VALUE height);
33
+
34
+ VALUE rb_to_s(VALUE self);
35
+ VALUE rb_to_ary(VALUE self);
36
+
37
+ VALUE new_object();
38
+ VALUE new_object(CvSize size);
39
+
40
+ __NAMESPACE_END_CVSIZE
41
+
42
+ inline CvSize*
43
+ CVSIZE(VALUE object)
44
+ {
45
+ CvSize *ptr;
46
+ Data_Get_Struct(object, CvSize, ptr);
47
+ return ptr;
48
+ }
49
+
50
+ inline CvSize
51
+ VALUE_TO_CVSIZE(VALUE object)
52
+ {
53
+ if (cCvSize::rb_compatible_q(cCvSize::rb_class(), object)) {
54
+ return cvSize(NUM2INT(rb_funcall(object, rb_intern("width"), 0)),
55
+ NUM2INT(rb_funcall(object, rb_intern("height"), 0)));
56
+ }
57
+ else {
58
+ raise_compatible_typeerror(object, cCvSize::rb_class());
59
+ }
60
+ throw "Should never reach here";
61
+ }
62
+
63
+ __NAMESPACE_END_OPENCV
64
+
65
+ #endif // RUBY_OPENCV_CVSIZE_H
@@ -0,0 +1,215 @@
1
+ /************************************************************
2
+
3
+ cvsize2d32f.cpp -
4
+
5
+ $Author: lsxi $
6
+
7
+ Copyright (C) 2005-2006 Masakazu Yonekura
8
+
9
+ ************************************************************/
10
+ #include "cvsize2d32f.h"
11
+ /*
12
+ * Document-class: OpenCV::CvSize2D32f
13
+ *
14
+ * This class means one size on X axis Y axis.
15
+ * X and Y takes the value of the Float.
16
+ *
17
+ * C structure is here, very simple.
18
+ * typdef struct CvSize2D32f {
19
+ * float width;
20
+ * float height;
21
+ * } CvSize2D32f;
22
+ */
23
+ __NAMESPACE_BEGIN_OPENCV
24
+ __NAMESPACE_BEGIN_CVSIZE2D32F
25
+
26
+ VALUE rb_klass;
27
+
28
+ VALUE
29
+ rb_class()
30
+ {
31
+ return rb_klass;
32
+ }
33
+
34
+ /*
35
+ * call-seq:
36
+ * compatible?(obj)
37
+ *
38
+ * Return compatibility to CvSize2D32f. Return true if object have method #width and #height.
39
+ *
40
+ * For example.
41
+ * class MySize
42
+ * def width
43
+ * 10.1
44
+ * end
45
+ * def height
46
+ * 20.2
47
+ * end
48
+ * end
49
+ * mp = MySize.new
50
+ * CvSize2D32f.compatible?(mp) #=> true
51
+ * CvSize2D32f.new(mp) #=> same as CvSize2D32f.new(10.1, 20.2)
52
+ */
53
+ VALUE
54
+ rb_compatible_q(VALUE klass, VALUE object)
55
+ {
56
+ return (rb_respond_to(object, rb_intern("width")) && rb_respond_to(object, rb_intern("height"))) ? Qtrue : Qfalse;
57
+ }
58
+
59
+ VALUE
60
+ rb_allocate(VALUE klass)
61
+ {
62
+ CvSize2D32f *ptr;
63
+ return Data_Make_Struct(klass, CvSize2D32f, 0, -1, ptr);
64
+ }
65
+
66
+ /*
67
+ * call-seq:
68
+ * new
69
+ * new(obj)
70
+ * new(width, height)
71
+ *
72
+ * Create new size of 2D, (width, height).
73
+ *
74
+ * new() is same as new(0.0, 0.0)
75
+ *
76
+ * new(obj) is same as new(obj.x.to_f, obj.y.to_f)
77
+ */
78
+ VALUE
79
+ rb_initialize(int argc, VALUE *argv, VALUE self)
80
+ {
81
+ CvSize2D32f *self_ptr = CVSIZE2D32F(self);
82
+ switch(argc){
83
+ case 0:
84
+ break;
85
+ case 1: {
86
+ CvSize2D32f size = VALUE_TO_CVSIZE2D32F(argv[0]);
87
+ self_ptr->width = size.width;
88
+ self_ptr->height = size.height;
89
+ break;
90
+ }
91
+ case 2:
92
+ self_ptr->width = NUM2DBL(argv[0]);
93
+ self_ptr->height = NUM2DBL(argv[1]);
94
+ break;
95
+ default:
96
+ rb_raise(rb_eArgError, "wrong number of arguments (%d for 0..2)", argc);
97
+ }
98
+ return self;
99
+ }
100
+
101
+ /*
102
+ * Return size of x-axis.
103
+ */
104
+ VALUE
105
+ rb_width(VALUE self)
106
+ {
107
+ return rb_float_new(CVSIZE2D32F(self)->width);
108
+ }
109
+
110
+ /*
111
+ * call-seq:
112
+ * width = val
113
+ *
114
+ * Set x-axis size, return self.
115
+ */
116
+ VALUE
117
+ rb_set_width(VALUE self, VALUE x)
118
+ {
119
+ CVSIZE2D32F(self)->width = NUM2DBL(x);
120
+ return self;
121
+ }
122
+
123
+ /*
124
+ * Return size of yaxis.
125
+ */
126
+ VALUE
127
+ rb_height(VALUE self)
128
+ {
129
+ return rb_float_new(CVSIZE2D32F(self)->height);
130
+ }
131
+
132
+ /*
133
+ * call-seq:
134
+ * height = val
135
+ *
136
+ * Set y-axis size, return self.
137
+ */
138
+ VALUE
139
+ rb_set_height(VALUE self, VALUE y)
140
+ {
141
+ CVSIZE2D32F(self)->height = NUM2DBL(y);
142
+ return self;
143
+ }
144
+
145
+ /*
146
+ * call-seq:
147
+ * to_s -> "<OpenCV::CvSize2D32f:widthxheight>"
148
+ *
149
+ * Return width and height by String.
150
+ */
151
+ VALUE
152
+ rb_to_s(VALUE self)
153
+ {
154
+ const int i = 4;
155
+ VALUE str[i];
156
+ str[0] = rb_str_new2("<%s:%gx%g>");
157
+ str[1] = rb_str_new2(rb_class2name(CLASS_OF(self)));
158
+ str[2] = rb_width(self);
159
+ str[3] = rb_height(self);
160
+ return rb_f_sprintf(i, str);
161
+ }
162
+
163
+ /*
164
+ * call-seq:
165
+ * to_ary -> [width, height]
166
+ *
167
+ * Return width and height by Array.
168
+ */
169
+ VALUE
170
+ rb_to_ary(VALUE self)
171
+ {
172
+ return rb_ary_new3(2, rb_width(self), rb_height(self));
173
+ }
174
+
175
+ VALUE
176
+ new_object(CvSize2D32f size)
177
+ {
178
+ VALUE object = rb_allocate(rb_klass);
179
+ *CVSIZE2D32F(object) = size;
180
+ return object;
181
+ }
182
+
183
+ void
184
+ init_ruby_class()
185
+ {
186
+ #if 0
187
+ // For documentation using YARD
188
+ VALUE opencv = rb_define_module("OpenCV");
189
+ #endif
190
+
191
+ if (rb_klass)
192
+ return;
193
+ /*
194
+ * opencv = rb_define_module("OpenCV");
195
+ *
196
+ * note: this comment is used by rdoc.
197
+ */
198
+ VALUE opencv = rb_module_opencv();
199
+
200
+ rb_klass = rb_define_class_under(opencv, "CvSize2D32f", rb_cObject);
201
+ rb_define_alloc_func(rb_klass, rb_allocate);
202
+ rb_define_singleton_method(rb_klass, "compatible?", RUBY_METHOD_FUNC(rb_compatible_q), 1);
203
+ rb_define_method(rb_klass, "initialize", RUBY_METHOD_FUNC(rb_initialize), -1);
204
+ rb_define_method(rb_klass, "width", RUBY_METHOD_FUNC(rb_width), 0);
205
+ rb_define_method(rb_klass, "width=", RUBY_METHOD_FUNC(rb_set_width), 1);
206
+ rb_define_method(rb_klass, "height", RUBY_METHOD_FUNC(rb_height), 0);
207
+ rb_define_method(rb_klass, "height=", RUBY_METHOD_FUNC(rb_set_height), 1);
208
+ rb_define_method(rb_klass, "to_s", RUBY_METHOD_FUNC(rb_to_s), 0);
209
+ rb_define_method(rb_klass, "to_ary", RUBY_METHOD_FUNC(rb_to_ary), 0);
210
+ rb_define_alias(rb_klass, "to_a", "to_ary");
211
+ }
212
+
213
+ __NAMESPACE_END_CVSIZE2D32F
214
+ __NAMESPACE_END_OPENCV
215
+