jf-ruby-opencv 0.0.18

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 (241) 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 +94 -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 +633 -0
  50. data/ext/opencv/cvcapture.h +82 -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 +384 -0
  58. data/ext/opencv/cvcontour.h +51 -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 +717 -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 +6086 -0
  78. data/ext/opencv/cvmat.h +290 -0
  79. data/ext/opencv/cvmemstorage.cpp +73 -0
  80. data/ext/opencv/cvmemstorage.h +50 -0
  81. data/ext/opencv/cvmoments.cpp +293 -0
  82. data/ext/opencv/cvmoments.h +75 -0
  83. data/ext/opencv/cvpoint.cpp +234 -0
  84. data/ext/opencv/cvpoint.h +64 -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 +338 -0
  90. data/ext/opencv/cvrect.h +79 -0
  91. data/ext/opencv/cvscalar.cpp +241 -0
  92. data/ext/opencv/cvscalar.h +71 -0
  93. data/ext/opencv/cvseq.cpp +663 -0
  94. data/ext/opencv/cvseq.h +75 -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 +246 -0
  104. data/ext/opencv/cvsurfpoint.h +52 -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 +192 -0
  110. data/ext/opencv/cvutils.h +30 -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 +77 -0
  116. data/ext/opencv/facerecognizer.cpp +219 -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 +651 -0
  125. data/ext/opencv/iplimage.h +73 -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 +819 -0
  131. data/ext/opencv/opencv.h +408 -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 +3 -0
  144. data/ruby-opencv.gemspec +44 -0
  145. data/test/eigenfaces_save.xml +7524 -0
  146. data/test/fisherfaces_save.xml +7530 -0
  147. data/test/helper.rb +167 -0
  148. data/test/lbph_save.xml +4304 -0
  149. data/test/runner.rb +30 -0
  150. data/test/samples/airplane.jpg +0 -0
  151. data/test/samples/baboon.jpg +0 -0
  152. data/test/samples/baboon200.jpg +0 -0
  153. data/test/samples/baboon200_rotated.jpg +0 -0
  154. data/test/samples/blank0.jpg +0 -0
  155. data/test/samples/blank1.jpg +0 -0
  156. data/test/samples/blank2.jpg +0 -0
  157. data/test/samples/blank3.jpg +0 -0
  158. data/test/samples/blank4.jpg +0 -0
  159. data/test/samples/blank5.jpg +0 -0
  160. data/test/samples/blank6.jpg +0 -0
  161. data/test/samples/blank7.jpg +0 -0
  162. data/test/samples/blank8.jpg +0 -0
  163. data/test/samples/blank9.jpg +0 -0
  164. data/test/samples/cat.jpg +0 -0
  165. data/test/samples/chessboard.jpg +0 -0
  166. data/test/samples/contours.jpg +0 -0
  167. data/test/samples/fruits.jpg +0 -0
  168. data/test/samples/haarcascade_frontalface_alt.xml.gz +0 -0
  169. data/test/samples/inpaint-mask.bmp +0 -0
  170. data/test/samples/lena-256x256.jpg +0 -0
  171. data/test/samples/lena-32x32.jpg +0 -0
  172. data/test/samples/lena-eyes.jpg +0 -0
  173. data/test/samples/lena-inpaint.jpg +0 -0
  174. data/test/samples/lena.jpg +0 -0
  175. data/test/samples/lines.jpg +0 -0
  176. data/test/samples/messy0.jpg +0 -0
  177. data/test/samples/messy1.jpg +0 -0
  178. data/test/samples/movie_sample.avi +0 -0
  179. data/test/samples/one_way_train_0000.jpg +0 -0
  180. data/test/samples/one_way_train_0001.jpg +0 -0
  181. data/test/samples/partially_blank0.jpg +0 -0
  182. data/test/samples/partially_blank1.jpg +0 -0
  183. data/test/samples/smooth0.jpg +0 -0
  184. data/test/samples/smooth1.jpg +0 -0
  185. data/test/samples/smooth2.jpg +0 -0
  186. data/test/samples/smooth3.jpg +0 -0
  187. data/test/samples/smooth4.jpg +0 -0
  188. data/test/samples/smooth5.jpg +0 -0
  189. data/test/samples/smooth6.jpg +0 -0
  190. data/test/samples/str-cv-rotated.jpg +0 -0
  191. data/test/samples/str-cv.jpg +0 -0
  192. data/test/samples/str-ov.jpg +0 -0
  193. data/test/samples/stuff.jpg +0 -0
  194. data/test/test_curve.rb +43 -0
  195. data/test/test_cvavgcomp.rb +24 -0
  196. data/test/test_cvbox2d.rb +76 -0
  197. data/test/test_cvcapture.rb +191 -0
  198. data/test/test_cvchain.rb +108 -0
  199. data/test/test_cvcircle32f.rb +41 -0
  200. data/test/test_cvconnectedcomp.rb +61 -0
  201. data/test/test_cvcontour.rb +171 -0
  202. data/test/test_cvcontourtree.rb +43 -0
  203. data/test/test_cverror.rb +50 -0
  204. data/test/test_cvfeaturetree.rb +65 -0
  205. data/test/test_cvfont.rb +58 -0
  206. data/test/test_cvhaarclassifiercascade.rb +63 -0
  207. data/test/test_cvhistogram.rb +271 -0
  208. data/test/test_cvhumoments.rb +83 -0
  209. data/test/test_cvline.rb +50 -0
  210. data/test/test_cvmat.rb +3036 -0
  211. data/test/test_cvmat_drawing.rb +349 -0
  212. data/test/test_cvmat_dxt.rb +150 -0
  213. data/test/test_cvmat_imageprocessing.rb +2085 -0
  214. data/test/test_cvmoments.rb +180 -0
  215. data/test/test_cvpoint.rb +75 -0
  216. data/test/test_cvpoint2d32f.rb +75 -0
  217. data/test/test_cvpoint3d32f.rb +93 -0
  218. data/test/test_cvrect.rb +144 -0
  219. data/test/test_cvscalar.rb +113 -0
  220. data/test/test_cvseq.rb +311 -0
  221. data/test/test_cvsize.rb +75 -0
  222. data/test/test_cvsize2d32f.rb +75 -0
  223. data/test/test_cvslice.rb +31 -0
  224. data/test/test_cvsurfparams.rb +57 -0
  225. data/test/test_cvsurfpoint.rb +66 -0
  226. data/test/test_cvtermcriteria.rb +56 -0
  227. data/test/test_cvtwopoints.rb +40 -0
  228. data/test/test_cvvideowriter.rb +58 -0
  229. data/test/test_eigenfaces.rb +93 -0
  230. data/test/test_fisherfaces.rb +93 -0
  231. data/test/test_iplconvkernel.rb +54 -0
  232. data/test/test_iplimage.rb +232 -0
  233. data/test/test_lbph.rb +166 -0
  234. data/test/test_mouseevent.rb +17 -0
  235. data/test/test_opencv.rb +360 -0
  236. data/test/test_pointset.rb +128 -0
  237. data/test/test_preliminary.rb +130 -0
  238. data/test/test_trackbar.rb +47 -0
  239. data/test/test_window.rb +115 -0
  240. data/yard_extension.rb +5 -0
  241. metadata +352 -0
@@ -0,0 +1,75 @@
1
+ /************************************************************
2
+
3
+ cvmoments.h -
4
+
5
+ $Author: lsxi $
6
+
7
+ Copyright (C) 2007 Masakazu Yonekura
8
+
9
+ ************************************************************/
10
+ #ifndef RUBY_OPENCV_CVMOMENTS_H
11
+ #define RUBY_OPENCV_CVMOMENTS_H
12
+
13
+ #include "opencv.h"
14
+
15
+ #define __NAMESPACE_BEGIN_CVMOMENTS namespace cCvMoments {
16
+ #define __NAMESPACE_END_CVMOMENTS }
17
+
18
+ __NAMESPACE_BEGIN_OPENCV
19
+ __NAMESPACE_BEGIN_CVMOMENTS
20
+
21
+ VALUE rb_class();
22
+
23
+ void init_ruby_class();
24
+
25
+ VALUE rb_allocate(VALUE klass);
26
+ VALUE rb_initialize(int argc, VALUE *argv, VALUE self);
27
+ VALUE rb_spatial(VALUE self, VALUE x_order, VALUE y_order);
28
+ VALUE rb_central(VALUE self, VALUE x_order, VALUE y_order);
29
+ VALUE rb_normalized_central(VALUE self, VALUE x_order, VALUE y_order);
30
+ VALUE rb_hu(VALUE self);
31
+ VALUE rb_gravity_center(VALUE self);
32
+ VALUE rb_angle(VALUE self);
33
+
34
+ VALUE rb_m00(VALUE self);
35
+ VALUE rb_m10(VALUE self);
36
+ VALUE rb_m01(VALUE self);
37
+ VALUE rb_m20(VALUE self);
38
+ VALUE rb_m11(VALUE self);
39
+ VALUE rb_m02(VALUE self);
40
+ VALUE rb_m30(VALUE self);
41
+ VALUE rb_m21(VALUE self);
42
+ VALUE rb_m12(VALUE self);
43
+ VALUE rb_m03(VALUE self);
44
+ VALUE rb_mu20(VALUE self);
45
+ VALUE rb_mu11(VALUE self);
46
+ VALUE rb_mu02(VALUE self);
47
+ VALUE rb_mu30(VALUE self);
48
+ VALUE rb_mu21(VALUE self);
49
+ VALUE rb_mu12(VALUE self);
50
+ VALUE rb_mu03(VALUE self);
51
+ VALUE rb_inv_sqrt_m00(VALUE self);
52
+
53
+ VALUE new_object(CvArr *arr, int is_binary);
54
+
55
+ __NAMESPACE_END_CVMOMENTS
56
+
57
+ inline CvMoments*
58
+ CVMOMENTS(VALUE object)
59
+ {
60
+ CvMoments *ptr;
61
+ Data_Get_Struct(object, CvMoments, ptr);
62
+ return ptr;
63
+ }
64
+
65
+ inline CvMoments*
66
+ CVMOMENTS_WITH_CHECK(VALUE object)
67
+ {
68
+ if (!rb_obj_is_kind_of(object, cCvMoments::rb_class()))
69
+ raise_typeerror(object, cCvMoments::rb_class());
70
+ return CVMOMENTS(object);
71
+ }
72
+
73
+ __NAMESPACE_END_OPENCV
74
+
75
+ #endif // RUBY_OPENCV_CVMOMENTS_H
@@ -0,0 +1,234 @@
1
+ /************************************************************
2
+
3
+ cvpoint.cpp -
4
+
5
+ $Author: lsxi $
6
+
7
+ Copyright (C) 2005-2006 Masakazu Yonekura
8
+
9
+ ************************************************************/
10
+ #include "cvpoint.h"
11
+ /*
12
+ * Document-class: OpenCV::CvPoint
13
+ *
14
+ * This class means one point on X axis Y axis.
15
+ * X and Y takes the value of the Integer. see also CvPoint2D32F
16
+ *
17
+ * C structure is here, very simple.
18
+ * typdef struct CvPoint {
19
+ * int x;
20
+ * int y;
21
+ * }
22
+ */
23
+ __NAMESPACE_BEGIN_OPENCV
24
+ __NAMESPACE_BEGIN_CVPOINT
25
+
26
+ VALUE rb_klass;
27
+
28
+ VALUE
29
+ rb_class()
30
+ {
31
+ return rb_klass;
32
+ }
33
+
34
+ /*
35
+ * call-seq:
36
+ * combatible?(obj)
37
+ *
38
+ * Return compatibility to CvPoint. Return true if object have method #x and #y.
39
+ *
40
+ * For example.
41
+ * class MyPoint
42
+ * def x
43
+ * 1
44
+ * end
45
+ * def y
46
+ * 2
47
+ * end
48
+ * end
49
+ * mp = MyPoint.new
50
+ * CvPoint.compatible?(mp) #=> true
51
+ * CvPoint.new(mp) #=> same as CvPoint(1, 2)
52
+ */
53
+ VALUE
54
+ rb_compatible_q(VALUE klass, VALUE object)
55
+ {
56
+ return (rb_respond_to(object, rb_intern("x")) && rb_respond_to(object, rb_intern("y"))) ? Qtrue : Qfalse;
57
+ }
58
+
59
+ VALUE
60
+ rb_allocate(VALUE klass)
61
+ {
62
+ CvPoint *ptr;
63
+ return Data_Make_Struct(klass, CvPoint, 0, -1, ptr);
64
+ }
65
+
66
+ /*
67
+ * call-seq:
68
+ * new -> CvPoint.new(0, 0)
69
+ * new(obj) -> CvPoint.new(obj.x.to_i, obj.y.to_i)
70
+ * new(x, y)
71
+ *
72
+ * Create new 2D-coordinate, (x, y). 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
+ CvPoint* self_ptr = CVPOINT(self);
82
+ switch (argc) {
83
+ case 0:
84
+ break;
85
+ case 1: {
86
+ CvPoint point = VALUE_TO_CVPOINT(argv[0]);
87
+ self_ptr->x = point.x;
88
+ self_ptr->y = point.y;
89
+ break;
90
+ }
91
+ case 2:
92
+ self_ptr->x = NUM2INT(argv[0]);
93
+ self_ptr->y = 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 parameter on x-axis.
104
+ */
105
+ VALUE
106
+ rb_x(VALUE self)
107
+ {
108
+ return INT2NUM(CVPOINT(self)->x);
109
+ }
110
+
111
+ /*
112
+ * call-seq:
113
+ * x = val
114
+ *
115
+ * Set x-axis parameter, return self.
116
+ * It is dropped below the decimal point.
117
+ * pt = CvPoint.new
118
+ * pt.x = 1.1
119
+ * pt.x #=> 1
120
+ * pt.x = 100.9
121
+ * pt.x #=> 100
122
+ */
123
+ VALUE
124
+ rb_set_x(VALUE self, VALUE x)
125
+ {
126
+ CVPOINT(self)->x = NUM2INT(x);
127
+ return self;
128
+ }
129
+
130
+ /*
131
+ * Return parameter on y-axis.
132
+ */
133
+ VALUE
134
+ rb_y(VALUE self)
135
+ {
136
+ return INT2NUM(CVPOINT(self)->y);
137
+ }
138
+
139
+ /*
140
+ * call-seq:
141
+ * y = val
142
+ *
143
+ * Set y-axis parameter, return self.
144
+ * It is dropped below the decimal point.
145
+ */
146
+ VALUE
147
+ rb_set_y(VALUE self, VALUE y)
148
+ {
149
+ CVPOINT(self)->y = NUM2INT(y);
150
+ return self;
151
+ }
152
+
153
+ /*
154
+ * call-seq:
155
+ * to_s -> "<OpenCV::CvPoint:(self.x,self.y)>"
156
+ *
157
+ * Return x and y by String.
158
+ */
159
+ VALUE
160
+ rb_to_s(VALUE self)
161
+ {
162
+ const int i = 4;
163
+ VALUE str[i];
164
+ str[0] = rb_str_new2("<%s:(%d,%d)>");
165
+ str[1] = rb_str_new2(rb_class2name(CLASS_OF(self)));
166
+ str[2] = rb_x(self);
167
+ str[3] = rb_y(self);
168
+ return rb_f_sprintf(i, str);
169
+ }
170
+
171
+ /*
172
+ * call-seq:
173
+ * to_ary -> [x, y]
174
+ *
175
+ * Return x and y by Array.
176
+ */
177
+ VALUE
178
+ rb_to_ary(VALUE self)
179
+ {
180
+ CvPoint* self_ptr = CVPOINT(self);
181
+ return rb_ary_new3(2, INT2NUM(self_ptr->x), INT2NUM(self_ptr->y));
182
+ }
183
+
184
+ VALUE
185
+ new_object()
186
+ {
187
+ VALUE object = rb_allocate(rb_klass);
188
+ *CVPOINT(object) = cvPoint(0, 0);
189
+ return object;
190
+ }
191
+
192
+
193
+ VALUE
194
+ new_object(CvPoint point)
195
+ {
196
+ VALUE object = rb_allocate(rb_klass);
197
+ *CVPOINT(object) = point;
198
+ return object;
199
+ }
200
+
201
+ void
202
+ init_ruby_class()
203
+ {
204
+ #if 0
205
+ // For documentation using YARD
206
+ VALUE opencv = rb_define_module("OpenCV");
207
+ #endif
208
+
209
+ if (rb_klass)
210
+ return;
211
+ /*
212
+ * opencv = rb_define_module("OpenCV");
213
+ *
214
+ * note: this comment is used by rdoc.
215
+ */
216
+ VALUE opencv = rb_module_opencv();
217
+
218
+ rb_klass = rb_define_class_under(opencv, "CvPoint", rb_cObject);
219
+ rb_define_alloc_func(rb_klass, rb_allocate);
220
+ rb_define_singleton_method(rb_klass, "compatible?", RUBY_METHOD_FUNC(rb_compatible_q), 1);
221
+ rb_define_method(rb_klass, "initialize", RUBY_METHOD_FUNC(rb_initialize), -1);
222
+ rb_define_method(rb_klass, "x", RUBY_METHOD_FUNC(rb_x), 0);
223
+ rb_define_method(rb_klass, "x=", RUBY_METHOD_FUNC(rb_set_x), 1);
224
+ rb_define_method(rb_klass, "y", RUBY_METHOD_FUNC(rb_y), 0);
225
+ rb_define_method(rb_klass, "y=", RUBY_METHOD_FUNC(rb_set_y), 1);
226
+
227
+ rb_define_method(rb_klass, "to_s", RUBY_METHOD_FUNC(rb_to_s), 0);
228
+ rb_define_method(rb_klass, "to_ary", RUBY_METHOD_FUNC(rb_to_ary), 0);
229
+ rb_define_alias(rb_klass, "to_a", "to_ary");
230
+ }
231
+
232
+ __NAMESPACE_END_CVPOINT
233
+ __NAMESPACE_END_OPENCV
234
+
@@ -0,0 +1,64 @@
1
+ /************************************************************
2
+
3
+ cvpoint.h -
4
+
5
+ $Author: lsxi $
6
+
7
+ Copyright (C) 2005-2006 Masakazu Yonekura
8
+
9
+ ************************************************************/
10
+ #ifndef RUBY_OPENCV_CVPOINT_H
11
+ #define RUBY_OPENCV_CVPOINT_H
12
+
13
+ #include "opencv.h"
14
+
15
+ #define __NAMESPACE_BEGIN_CVPOINT namespace cCvPoint {
16
+ #define __NAMESPACE_END_CVPOINT }
17
+
18
+ __NAMESPACE_BEGIN_OPENCV
19
+ __NAMESPACE_BEGIN_CVPOINT
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_x(VALUE self);
30
+ VALUE rb_set_x(VALUE self, VALUE x);
31
+ VALUE rb_y(VALUE self);
32
+ VALUE rb_set_y(VALUE self, VALUE y);
33
+
34
+ VALUE rb_to_s(VALUE self);
35
+ VALUE rb_to_ary(VALUE self);
36
+
37
+ VALUE new_object();
38
+ VALUE new_object(CvPoint point);
39
+
40
+ __NAMESPACE_END_CVPOINT
41
+
42
+ inline CvPoint*
43
+ CVPOINT(VALUE object){
44
+ CvPoint *ptr;
45
+ Data_Get_Struct(object, CvPoint, ptr);
46
+ return ptr;
47
+ }
48
+
49
+ inline CvPoint
50
+ VALUE_TO_CVPOINT(VALUE object)
51
+ {
52
+ if (cCvPoint::rb_compatible_q(cCvPoint::rb_class(), object)) {
53
+ return cvPoint(NUM2INT(rb_funcall(object, rb_intern("x"), 0)),
54
+ NUM2INT(rb_funcall(object, rb_intern("y"), 0)));
55
+ }
56
+ else {
57
+ raise_compatible_typeerror(object, cCvPoint::rb_class());
58
+ }
59
+ throw "Should never reach here";
60
+ }
61
+
62
+ __NAMESPACE_END_OPENCV
63
+
64
+ #endif // RUBY_OPENCV_CVPOINT_H
@@ -0,0 +1,216 @@
1
+ /************************************************************
2
+
3
+ cvpoint2d32f.cpp -
4
+
5
+ $Author: lsxi $
6
+
7
+ Copyright (C) 2005 Masakazu Yonekura
8
+
9
+ ************************************************************/
10
+ #include "cvpoint2d32f.h"
11
+ /*
12
+ * Document-class: OpenCV::CvPoint2D32f
13
+ *
14
+ * This class means one point on X axis Y axis.
15
+ * X and Y takes the value of the Float. see also CvPoint
16
+ *
17
+ * C structure is here, very simple.
18
+ * typdef struct CvPoint2D32f {
19
+ * float x;
20
+ * float y;
21
+ * }
22
+ */
23
+ __NAMESPACE_BEGIN_OPENCV
24
+ __NAMESPACE_BEGIN_CVPOINT2D32F
25
+
26
+ VALUE rb_klass;
27
+
28
+ VALUE
29
+ rb_class()
30
+ {
31
+ return rb_klass;
32
+ }
33
+
34
+ /*
35
+ * call-seq:
36
+ * combatible?(obj)
37
+ *
38
+ * Return compatibility to CvPoint2D32f. Return true if object have method #x and #y.
39
+ *
40
+ * For example.
41
+ * class MyPoint2D32f
42
+ * def x
43
+ * 95.7
44
+ * end
45
+ * def y
46
+ * 70.2
47
+ * end
48
+ * end
49
+ * mp = MyPoint2D32f.new
50
+ * CvPoint2D32f.compatible?(mp) #=> true
51
+ * CvPoint2D32f.new(mp) #=> same as CvPoint2D32f(95.7, 70.2)
52
+ */
53
+ VALUE
54
+ rb_compatible_q(VALUE klass, VALUE object)
55
+ {
56
+ return (rb_respond_to(object, rb_intern("x")) && rb_respond_to(object, rb_intern("y"))) ? Qtrue : Qfalse;
57
+ }
58
+
59
+ VALUE
60
+ rb_allocate(VALUE klass)
61
+ {
62
+ CvPoint2D32f *ptr;
63
+ return Data_Make_Struct(klass, CvPoint2D32f, 0, -1, ptr);
64
+ }
65
+
66
+ /*
67
+ * call-seq:
68
+ * new
69
+ * new(obj)
70
+ * new(x, y)
71
+ *
72
+ * Create new 2D-coordinate, (x, y).
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
+ CvPoint2D32f *self_ptr = CVPOINT2D32F(self);
82
+ switch (argc) {
83
+ case 0:
84
+ break;
85
+ case 1: {
86
+ CvPoint2D32f point = VALUE_TO_CVPOINT2D32F(argv[0]);
87
+ self_ptr->x = point.x;
88
+ self_ptr->y = point.y;
89
+ break;
90
+ }
91
+ case 2:
92
+ self_ptr->x = NUM2DBL(argv[0]);
93
+ self_ptr->y = NUM2DBL(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 parameter on x-axis.
104
+ */
105
+ VALUE
106
+ rb_x(VALUE self)
107
+ {
108
+ return rb_float_new(CVPOINT2D32F(self)->x);
109
+ }
110
+
111
+ /*
112
+ * call-seq:
113
+ * x = val
114
+ *
115
+ * Set x-axis parameter, return self.
116
+ */
117
+ VALUE
118
+ rb_set_x(VALUE self, VALUE x)
119
+ {
120
+ CVPOINT2D32F(self)->x = NUM2DBL(x);
121
+ return self;
122
+ }
123
+
124
+ /*
125
+ * Return parameter on y-axis.
126
+ */
127
+ VALUE
128
+ rb_y(VALUE self)
129
+ {
130
+ return rb_float_new(CVPOINT2D32F(self)->y);
131
+ }
132
+
133
+ /*
134
+ * call-seq:
135
+ * y = val
136
+ *
137
+ * Set y-axis parameter, return self.
138
+ */
139
+ VALUE
140
+ rb_set_y(VALUE self, VALUE y)
141
+ {
142
+ CVPOINT2D32F(self)->y = NUM2DBL(y);
143
+ return self;
144
+ }
145
+
146
+ /*
147
+ * call-seq:
148
+ * to_s -> "<OpenCV::CvSize2D32f:(self.x,self.y)>"
149
+ *
150
+ * Return x and y by String.
151
+ */
152
+ VALUE
153
+ rb_to_s(VALUE self)
154
+ {
155
+ const int i = 4;
156
+ VALUE str[i];
157
+ str[0] = rb_str_new2("<%s:(%g,%g)>");
158
+ str[1] = rb_str_new2(rb_class2name(CLASS_OF(self)));
159
+ str[2] = rb_x(self);
160
+ str[3] = rb_y(self);
161
+ return rb_f_sprintf(i, str);
162
+ }
163
+
164
+ /*
165
+ * call-seq:
166
+ * to_ary -> [x, y]
167
+ *
168
+ * Return x and y by Array.
169
+ */
170
+ VALUE
171
+ rb_to_ary(VALUE self)
172
+ {
173
+ return rb_ary_new3(2, rb_x(self), rb_y(self));
174
+ }
175
+
176
+ VALUE
177
+ new_object(CvPoint2D32f point)
178
+ {
179
+ VALUE object = rb_allocate(rb_klass);
180
+ *CVPOINT2D32F(object) = point;
181
+ return object;
182
+ }
183
+
184
+ void
185
+ init_ruby_class()
186
+ {
187
+ #if 0
188
+ // For documentation using YARD
189
+ VALUE opencv = rb_define_module("OpenCV");
190
+ #endif
191
+
192
+ if (rb_klass)
193
+ return;
194
+ /*
195
+ * opencv = rb_define_module("OpenCV");
196
+ *
197
+ * note: this comment is used by rdoc.
198
+ */
199
+ VALUE opencv = rb_module_opencv();
200
+
201
+ rb_klass = rb_define_class_under(opencv, "CvPoint2D32f", rb_cObject);
202
+ rb_define_alloc_func(rb_klass, rb_allocate);
203
+ rb_define_singleton_method(rb_klass, "compatible?", RUBY_METHOD_FUNC(rb_compatible_q), 1);
204
+ rb_define_method(rb_klass, "initialize", RUBY_METHOD_FUNC(rb_initialize), -1);
205
+ rb_define_method(rb_klass, "x", RUBY_METHOD_FUNC(rb_x), 0);
206
+ rb_define_method(rb_klass, "x=", RUBY_METHOD_FUNC(rb_set_x), 1);
207
+ rb_define_method(rb_klass, "y", RUBY_METHOD_FUNC(rb_y), 0);
208
+ rb_define_method(rb_klass, "y=", RUBY_METHOD_FUNC(rb_set_y), 1);
209
+
210
+ rb_define_method(rb_klass, "to_s", RUBY_METHOD_FUNC(rb_to_s), 0);
211
+ rb_define_method(rb_klass, "to_ary", RUBY_METHOD_FUNC(rb_to_ary), 0);
212
+ rb_define_alias(rb_klass, "to_a", "to_ary");
213
+ }
214
+
215
+ __NAMESPACE_END_CVPOINT2D32F
216
+ __NAMESPACE_END_OPENCV