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,63 @@
1
+ /************************************************************
2
+
3
+ cvpoint2d32f.h -
4
+
5
+ $Author: lsxi $
6
+
7
+ Copyright (C) 2005 Masakazu Yonekura
8
+
9
+ ************************************************************/
10
+ #ifndef RUBY_OPENCV_CVPOINT2D32F_H
11
+ #define RUBY_OPENCV_CVPOINT2D32F_H
12
+
13
+ #define __NAMESPACE_BEGIN_CVPOINT2D32F namespace cCvPoint2D32f {
14
+ #define __NAMESPACE_END_CVPOINT2D32F }
15
+
16
+ #include "opencv.h"
17
+
18
+ __NAMESPACE_BEGIN_OPENCV
19
+ __NAMESPACE_BEGIN_CVPOINT2D32F
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(CvPoint2D32f point);
38
+
39
+ __NAMESPACE_END_CVPOINT2D32F
40
+
41
+ inline CvPoint2D32f*
42
+ CVPOINT2D32F(VALUE object)
43
+ {
44
+ CvPoint2D32f *ptr;
45
+ Data_Get_Struct(object, CvPoint2D32f, ptr);
46
+ return ptr;
47
+ }
48
+
49
+ inline CvPoint2D32f
50
+ VALUE_TO_CVPOINT2D32F(VALUE object)
51
+ {
52
+ if (cCvPoint2D32f::rb_compatible_q(cCvPoint2D32f::rb_class(), object)) {
53
+ return cvPoint2D32f(NUM2DBL(rb_funcall(object, rb_intern("x"), 0)),
54
+ NUM2DBL(rb_funcall(object, rb_intern("y"), 0)));
55
+ }
56
+ else {
57
+ raise_compatible_typeerror(object, cCvPoint2D32f::rb_class());
58
+ }
59
+ throw "Should never reach here";
60
+ }
61
+
62
+ __NAMESPACE_END_OPENCV
63
+ #endif // RUBY_OPENCV_CVPOINT2D32F_H
@@ -0,0 +1,252 @@
1
+ /************************************************************
2
+
3
+ cvpoint3d32f.cpp -
4
+
5
+ $Author: lsxi $
6
+
7
+ Copyright (C) 2005-2008 Masakazu Yonekura
8
+
9
+ ************************************************************/
10
+ #include "cvpoint3d32f.h"
11
+ /*
12
+ * Document-class: OpenCV::CvPoint3D32f
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 CvPoint3D32f {
19
+ * float x;
20
+ * float y;
21
+ * float z;
22
+ * }
23
+ */
24
+ __NAMESPACE_BEGIN_OPENCV
25
+ __NAMESPACE_BEGIN_CVPOINT3D32F
26
+
27
+ VALUE rb_klass;
28
+
29
+ VALUE
30
+ rb_class()
31
+ {
32
+ return rb_klass;
33
+ }
34
+
35
+ /*
36
+ * call-seq:
37
+ * combatible?(obj)
38
+ *
39
+ * Return compatibility to CvPoint3D32f. Return true if object have method #x and #y and #z.
40
+ *
41
+ * For example.
42
+ * class MyPoint3D32f
43
+ * def x
44
+ * 95.7
45
+ * end
46
+ * def y
47
+ * 70.2
48
+ * end
49
+ * def z
50
+ * 10.0
51
+ * end
52
+ * end
53
+ * mp = MyPoint3D32f.new
54
+ * CvPoint3D32f.compatible?(mp) #=> true
55
+ * CvPoint3D32f.new(mp) #=> same as CvPoint3D32f(95.7, 70.2)
56
+ */
57
+ VALUE
58
+ rb_compatible_q(VALUE klass, VALUE object)
59
+ {
60
+ return (rb_respond_to(object, rb_intern("x")) &&
61
+ rb_respond_to(object, rb_intern("y")) &&
62
+ rb_respond_to(object, rb_intern("z"))) ? Qtrue : Qfalse;
63
+ }
64
+
65
+ VALUE
66
+ rb_allocate(VALUE klass)
67
+ {
68
+ CvPoint3D32f *ptr;
69
+ return Data_Make_Struct(klass, CvPoint3D32f, 0, -1, ptr);
70
+ }
71
+
72
+ /*
73
+ * call-seq:
74
+ * new
75
+ * new(obj)
76
+ * new(x, y, z)
77
+ *
78
+ * Create new 3D-coordinate, (x, y, z).
79
+ *
80
+ * new() is same as new(0.0, 0.0, 0.0)
81
+ *
82
+ * new(obj) is same as new(obj.x.to_f, obj.y.to_f, obj.z.to_f)
83
+ */
84
+ VALUE
85
+ rb_initialize(int argc, VALUE *argv, VALUE self)
86
+ {
87
+ CvPoint3D32f *self_ptr = CVPOINT3D32F(self);
88
+ switch (argc) {
89
+ case 0:
90
+ break;
91
+ case 1: {
92
+ CvPoint3D32f point = VALUE_TO_CVPOINT3D32F(argv[0]);
93
+ self_ptr->x = point.x;
94
+ self_ptr->y = point.y;
95
+ self_ptr->z = point.z;
96
+ break;
97
+ }
98
+ case 3:
99
+ self_ptr->x = NUM2DBL(argv[0]);
100
+ self_ptr->y = NUM2DBL(argv[1]);
101
+ self_ptr->z = NUM2DBL(argv[2]);
102
+ break;
103
+ default:
104
+ rb_raise(rb_eArgError, "wrong number of arguments (%d for 0..2)", argc);
105
+ break;
106
+ }
107
+ return self;
108
+ }
109
+
110
+ /*
111
+ * Return parameter on x-axis.
112
+ */
113
+ VALUE
114
+ rb_x(VALUE self)
115
+ {
116
+ return rb_float_new(CVPOINT2D32F(self)->x);
117
+ }
118
+
119
+ /*
120
+ * call-seq:
121
+ * x = val
122
+ *
123
+ * Set x-axis parameter, return self.
124
+ */
125
+ VALUE
126
+ rb_set_x(VALUE self, VALUE x)
127
+ {
128
+ CVPOINT2D32F(self)->x = NUM2DBL(x);
129
+ return self;
130
+ }
131
+
132
+ /*
133
+ * Return parameter on y-axis.
134
+ */
135
+ VALUE
136
+ rb_y(VALUE self)
137
+ {
138
+ return rb_float_new(CVPOINT2D32F(self)->y);
139
+ }
140
+
141
+ /*
142
+ * call-seq:
143
+ * y = val
144
+ *
145
+ * Set y-axis parameter, return self.
146
+ */
147
+ VALUE
148
+ rb_set_y(VALUE self, VALUE y)
149
+ {
150
+ CVPOINT2D32F(self)->y = NUM2DBL(y);
151
+ return self;
152
+ }
153
+
154
+ /*
155
+ * Return parameter on z-axis.
156
+ */
157
+ VALUE
158
+ rb_z(VALUE self)
159
+ {
160
+ return rb_float_new(CVPOINT3D32F(self)->z);
161
+ }
162
+
163
+ /*
164
+ * call-seq:
165
+ * z = val
166
+ *
167
+ * Set z-axis parameter, return self.
168
+ */
169
+ VALUE
170
+ rb_set_z(VALUE self, VALUE z)
171
+ {
172
+ CVPOINT3D32F(self)->z = NUM2DBL(z);
173
+ return self;
174
+ }
175
+
176
+ /*
177
+ * call-seq:
178
+ * to_s -> "<OpenCV::CvSize3D32f:(self.x,self.y,self.z)>"
179
+ *
180
+ * Return x and y by String.
181
+ */
182
+ VALUE
183
+ rb_to_s(VALUE self)
184
+ {
185
+ const int i = 5;
186
+ VALUE str[i];
187
+ str[0] = rb_str_new2("<%s:(%g,%g,%g)>");
188
+ str[1] = rb_str_new2(rb_class2name(CLASS_OF(self)));
189
+ str[2] = rb_x(self);
190
+ str[3] = rb_y(self);
191
+ str[4] = rb_z(self);
192
+ return rb_f_sprintf(i, str);
193
+ }
194
+
195
+ /*
196
+ * call-seq:
197
+ * to_ary -> [x, y, z]
198
+ *
199
+ * Return x and y by Array.
200
+ */
201
+ VALUE
202
+ rb_to_ary(VALUE self)
203
+ {
204
+ return rb_ary_new3(3, rb_x(self), rb_y(self), rb_z(self));
205
+ }
206
+
207
+ VALUE
208
+ new_object(CvPoint3D32f point)
209
+ {
210
+ VALUE object = rb_allocate(rb_klass);
211
+ *CVPOINT3D32F(object) = point;
212
+ return object;
213
+ }
214
+
215
+ void
216
+ init_ruby_class()
217
+ {
218
+ #if 0
219
+ // For documentation using YARD
220
+ VALUE opencv = rb_define_module("OpenCV");
221
+ VALUE cvpoint2d32f = rb_define_class_under(opencv, "CvPoint2D32f", rb_cObject);
222
+ #endif
223
+
224
+ if (rb_klass)
225
+ return;
226
+ /*
227
+ * opencv = rb_define_module("OpenCV");
228
+ * cvpoint2d32f = rb_define_class_under(opencv, "CvPoint2D32f", rb_cObject);
229
+ *
230
+ * note: this comment is used by rdoc.
231
+ */
232
+ VALUE opencv = rb_module_opencv();
233
+ VALUE cvpoint2d32f = cCvPoint2D32f::rb_class();
234
+ rb_klass = rb_define_class_under(opencv, "CvPoint3D32f", cvpoint2d32f);
235
+ rb_define_alloc_func(rb_klass, rb_allocate);
236
+ rb_define_singleton_method(rb_klass, "compatible?", RUBY_METHOD_FUNC(rb_compatible_q), 1);
237
+ rb_define_method(rb_klass, "initialize", RUBY_METHOD_FUNC(rb_initialize), -1);
238
+ rb_define_method(rb_klass, "x", RUBY_METHOD_FUNC(rb_x), 0);
239
+ rb_define_method(rb_klass, "x=", RUBY_METHOD_FUNC(rb_set_x), 1);
240
+ rb_define_method(rb_klass, "y", RUBY_METHOD_FUNC(rb_y), 0);
241
+ rb_define_method(rb_klass, "y=", RUBY_METHOD_FUNC(rb_set_y), 1);
242
+ rb_define_method(rb_klass, "z", RUBY_METHOD_FUNC(rb_z), 0);
243
+ rb_define_method(rb_klass, "z=", RUBY_METHOD_FUNC(rb_set_z), 1);
244
+
245
+ rb_define_method(rb_klass, "to_s", RUBY_METHOD_FUNC(rb_to_s), 0);
246
+ rb_define_method(rb_klass, "to_ary", RUBY_METHOD_FUNC(rb_to_ary), 0);
247
+ rb_define_alias(rb_klass, "to_a", "to_ary");
248
+ }
249
+
250
+ __NAMESPACE_END_CVPOINT3D32F
251
+ __NAMESPACE_END_OPENCV
252
+
@@ -0,0 +1,66 @@
1
+ /************************************************************
2
+
3
+ cvpoint3d32f.h -
4
+
5
+ $Author: lsxi $
6
+
7
+ Copyright (C) 2005-2008 Masakazu Yonekura
8
+
9
+ ************************************************************/
10
+ #ifndef RUBY_OPENCV_CVPOINT3D32F_H
11
+ #define RUBY_OPENCV_CVPOINT3D32F_H
12
+
13
+ #define __NAMESPACE_BEGIN_CVPOINT3D32F namespace cCvPoint3D32f {
14
+ #define __NAMESPACE_END_CVPOINT3D32F }
15
+
16
+ #include "opencv.h"
17
+
18
+ __NAMESPACE_BEGIN_OPENCV
19
+ __NAMESPACE_BEGIN_CVPOINT3D32F
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
+ VALUE rb_z(VALUE self);
34
+ VALUE rb_set_z(VALUE self, VALUE z);
35
+
36
+ VALUE rb_to_s(VALUE self);
37
+ VALUE rb_to_ary(VALUE self);
38
+
39
+ VALUE new_object(CvPoint3D32f point);
40
+
41
+ __NAMESPACE_END_CVPOINT3D32F
42
+
43
+ inline CvPoint3D32f*
44
+ CVPOINT3D32F(VALUE object)
45
+ {
46
+ CvPoint3D32f *ptr;
47
+ Data_Get_Struct(object, CvPoint3D32f, ptr);
48
+ return ptr;
49
+ }
50
+
51
+ inline CvPoint3D32f
52
+ VALUE_TO_CVPOINT3D32F(VALUE object)
53
+ {
54
+ if (cCvPoint3D32f::rb_compatible_q(cCvPoint3D32f::rb_class(), object)) {
55
+ return cvPoint3D32f(NUM2DBL(rb_funcall(object, rb_intern("x"), 0)),
56
+ NUM2DBL(rb_funcall(object, rb_intern("y"), 0)),
57
+ NUM2DBL(rb_funcall(object, rb_intern("z"), 0)));
58
+ }
59
+ else {
60
+ raise_compatible_typeerror(object, cCvPoint3D32f::rb_class());
61
+ }
62
+ throw "Should never reach here";
63
+ }
64
+
65
+ __NAMESPACE_END_OPENCV
66
+ #endif // RUBY_OPENCV_CVPOINT3D32F_H
@@ -0,0 +1,338 @@
1
+ /************************************************************
2
+
3
+ cvrect.cpp -
4
+
5
+ $Author: lsxi $
6
+
7
+ Copyright (C) 2005-2006 Masakazu Yonekura
8
+
9
+ ************************************************************/
10
+ #include "cvrect.h"
11
+ /*
12
+ * Document-class: OpenCV::CvRect
13
+ *
14
+ * This class have coordinate of top-left point(x, y) and size, width and height.
15
+ *
16
+ *
17
+ * C stracture is here, very simple.
18
+ * typdef struct CvRect {
19
+ * int x;
20
+ * int y;
21
+ * int width;
22
+ * int height;
23
+ * }
24
+ *
25
+ */
26
+ __NAMESPACE_BEGIN_OPENCV
27
+ __NAMESPACE_BEGIN_CVRECT
28
+
29
+ VALUE rb_klass;
30
+
31
+ VALUE
32
+ rb_class()
33
+ {
34
+ return rb_klass;
35
+ }
36
+
37
+ /*
38
+ * call-seq:
39
+ * combatible?(obj)
40
+ *
41
+ * Return compatibility to CvRect. Return true if object have method #x and #y and #width and #height.
42
+ *
43
+ * For example.
44
+ * class MyRect
45
+ * def x
46
+ * 1
47
+ * end
48
+ * def y
49
+ * 2
50
+ * end
51
+ * def width
52
+ * 10
53
+ * end
54
+ * def height
55
+ * 20
56
+ * end
57
+ * end
58
+ * mr = MyRect.new
59
+ * CvRect.compatible?(mp) #=> true
60
+ * CvRect.new(mp) #=> same as CvRect(1, 2, 10, 20)
61
+ */
62
+ VALUE
63
+ rb_compatible_q(VALUE klass, VALUE object)
64
+ {
65
+ return (rb_respond_to(object, rb_intern("x")) &&
66
+ rb_respond_to(object, rb_intern("y")) &&
67
+ rb_respond_to(object, rb_intern("width")) &&
68
+ rb_respond_to(object, rb_intern("height"))) ? Qtrue : Qfalse;
69
+ }
70
+
71
+ /*
72
+ * call-seq:
73
+ * max_rect(rect1, rect2) -> cvrect
74
+ *
75
+ * Finds bounding rectangle for given rectangles.
76
+ */
77
+ VALUE
78
+ rb_max_rect(VALUE klass, VALUE rect1, VALUE rect2)
79
+ {
80
+ return cCvRect::new_object(cvMaxRect(CVRECT(rect1), CVRECT(rect2)));
81
+ }
82
+
83
+ VALUE
84
+ rb_allocate(VALUE klass)
85
+ {
86
+ CvRect *ptr;
87
+ return Data_Make_Struct(klass, CvRect, 0, -1, ptr);
88
+ }
89
+
90
+ /*
91
+ * call-seq:
92
+ * new -> CvRect.new(0, 0, 0, 0)
93
+ * new(obj) -> CvRect.new(obj.x.to_i, obj.y.to_i, obj.width.to_i, obj.height.to_i)
94
+ * new(x, y, width, height)
95
+ *
96
+ * Create new rectangle area. (x, y) is top-left point, and width, height is size of area.
97
+ * It is dropped below the decimal point.
98
+ *
99
+ * new() is same as new(0, 0, 0, 0)
100
+ *
101
+ * new(obj) is same as new(obj.x.to_i, obj.y.to_i, obj.width.to_i, obj.height.to_i)
102
+ */
103
+ VALUE
104
+ rb_initialize(int argc, VALUE *argv, VALUE self)
105
+ {
106
+ CvRect *self_ptr = CVRECT(self);
107
+ switch (argc) {
108
+ case 0:
109
+ break;
110
+ case 1: {
111
+ CvRect rect = VALUE_TO_CVRECT(argv[0]);
112
+ self_ptr->x = rect.x;
113
+ self_ptr->y = rect.y;
114
+ self_ptr->width = rect.width;
115
+ self_ptr->height = rect.height;
116
+ break;
117
+ }
118
+ case 4:
119
+ self_ptr->x = NUM2INT(argv[0]);
120
+ self_ptr->y = NUM2INT(argv[1]);
121
+ self_ptr->width = NUM2INT(argv[2]);
122
+ self_ptr->height = NUM2INT(argv[3]);
123
+ break;
124
+ default:
125
+ rb_raise(rb_eArgError, "wrong number of arguments (%d for 0..2)", argc);
126
+ break;
127
+ }
128
+ return self;
129
+ }
130
+
131
+ /*
132
+ * Return parameter on x-axis of top-left point.
133
+ */
134
+ VALUE
135
+ rb_x(VALUE self)
136
+ {
137
+ return INT2NUM(CVRECT(self)->x);
138
+ }
139
+
140
+ /*
141
+ * call-seq:
142
+ * x = val
143
+ *
144
+ * Set x-axis parameter of top-left point, return self.
145
+ * It is dropped below the decimal point.
146
+ */
147
+ VALUE
148
+ rb_set_x(VALUE self, VALUE x)
149
+ {
150
+ CVRECT(self)->x = NUM2INT(x);
151
+ return self;
152
+ }
153
+
154
+ /*
155
+ * Return parameter on y-axis of top-left point.
156
+ */
157
+ VALUE
158
+ rb_y(VALUE self)
159
+ {
160
+ return INT2NUM(CVRECT(self)->y);
161
+ }
162
+
163
+ /*
164
+ * call-seq:
165
+ * y = val
166
+ *
167
+ * Set y-axis parameter of top-left point, return self.
168
+ * It is dropped below the decimal point.
169
+ */
170
+ VALUE
171
+ rb_set_y(VALUE self, VALUE y)
172
+ {
173
+ CVRECT(self)->y = NUM2INT(y);
174
+ return self;
175
+ }
176
+
177
+ /*
178
+ * Return size of x-axis.
179
+ */
180
+ VALUE
181
+ rb_width(VALUE self)
182
+ {
183
+ return INT2NUM(CVRECT(self)->width);
184
+ }
185
+
186
+ /*
187
+ * call-seq:
188
+ * width = val
189
+ *
190
+ * Set x-axis size, return self.
191
+ * It is dropped below the decimal point.
192
+ */
193
+ VALUE
194
+ rb_set_width(VALUE self, VALUE x)
195
+ {
196
+ CVRECT(self)->width = NUM2INT(x);
197
+ return self;
198
+ }
199
+
200
+ /*
201
+ * Return size of y-axis.
202
+ */
203
+ VALUE
204
+ rb_height(VALUE self)
205
+ {
206
+ return INT2NUM(CVRECT(self)->height);
207
+ }
208
+
209
+ /*
210
+ * call-seq:
211
+ * height = val
212
+ *
213
+ * Set y-axis size, return self.
214
+ * It is dropped below the decimal point.
215
+ */
216
+ VALUE
217
+ rb_set_height(VALUE self, VALUE y)
218
+ {
219
+ CVRECT(self)->height = NUM2INT(y);
220
+ return self;
221
+ }
222
+
223
+ /*
224
+ * Return center point of rectangle.
225
+ */
226
+ VALUE
227
+ rb_center(VALUE self)
228
+ {
229
+ CvRect *rect = CVRECT(self);
230
+ return cCvPoint2D32f::new_object(cvPoint2D32f((float)rect->x + (float)rect->width / 2.0,
231
+ (float)rect->y + (float)rect->height / 2.0));
232
+ }
233
+
234
+ /*
235
+ * Return 4 points (top-left, bottom-left, bottom-right, top-right)
236
+ */
237
+ VALUE
238
+ rb_points(VALUE self)
239
+ {
240
+ CvRect *rect = CVRECT(self);
241
+ return rb_ary_new3(4,
242
+ cCvPoint::new_object(cvPoint(rect->x, rect->y)),
243
+ cCvPoint::new_object(cvPoint(rect->x, rect->y + rect->height)),
244
+ cCvPoint::new_object(cvPoint(rect->x + rect->width, rect->y + rect->height)),
245
+ cCvPoint::new_object(cvPoint(rect->x + rect->width, rect->y))
246
+ );
247
+ }
248
+
249
+ /*
250
+ * Return top-left point of rectangle.
251
+ */
252
+ VALUE
253
+ rb_top_left(VALUE self)
254
+ {
255
+ CvRect* rect = CVRECT(self);
256
+ return cCvPoint::new_object(cvPoint(rect->x, rect->y));
257
+ }
258
+
259
+ /*
260
+ * Return top-right point of rectangle.
261
+ */
262
+ VALUE
263
+ rb_top_right(VALUE self)
264
+ {
265
+ CvRect* rect = CVRECT(self);
266
+ return cCvPoint::new_object(cvPoint(rect->x + rect->width, rect->y));
267
+ }
268
+
269
+ /*
270
+ * Return bottom-left point of rectangle.
271
+ */
272
+ VALUE
273
+ rb_bottom_left(VALUE self)
274
+ {
275
+ CvRect* rect = CVRECT(self);
276
+ return cCvPoint::new_object(cvPoint(rect->x,
277
+ rect->y + rect->height));
278
+ }
279
+
280
+ /*
281
+ * Return bottom-right point of rectangle.
282
+ */
283
+ VALUE
284
+ rb_bottom_right(VALUE self)
285
+ {
286
+ CvRect* rect = CVRECT(self);
287
+ return cCvPoint::new_object(cvPoint(rect->x + rect->width,
288
+ rect->y + rect->height));
289
+ }
290
+
291
+ VALUE
292
+ new_object(CvRect rect)
293
+ {
294
+ VALUE object = rb_allocate(rb_klass);
295
+ *CVRECT(object) = rect;
296
+ return object;
297
+ }
298
+
299
+ void
300
+ init_ruby_class()
301
+ {
302
+ #if 0
303
+ // For documentation using YARD
304
+ VALUE opencv = rb_define_module("OpenCV");
305
+ #endif
306
+
307
+ if (rb_klass)
308
+ return;
309
+ /*
310
+ * opencv = rb_define_module("OpenCV");
311
+ *
312
+ * note: this comment is used by rdoc.
313
+ */
314
+ VALUE opencv = rb_module_opencv();
315
+ rb_klass = rb_define_class_under(opencv, "CvRect", rb_cObject);
316
+ rb_define_alloc_func(rb_klass, rb_allocate);
317
+ rb_define_singleton_method(rb_klass, "compatible?", RUBY_METHOD_FUNC(rb_compatible_q), 1);
318
+ rb_define_singleton_method(rb_klass, "max_rect", RUBY_METHOD_FUNC(rb_max_rect), 2);
319
+ rb_define_method(rb_klass, "initialize", RUBY_METHOD_FUNC(rb_initialize), -1);
320
+
321
+ rb_define_method(rb_klass, "x", RUBY_METHOD_FUNC(rb_x), 0);
322
+ rb_define_method(rb_klass, "x=", RUBY_METHOD_FUNC(rb_set_x), 1);
323
+ rb_define_method(rb_klass, "y", RUBY_METHOD_FUNC(rb_y), 0);
324
+ rb_define_method(rb_klass, "y=", RUBY_METHOD_FUNC(rb_set_y), 1);
325
+ rb_define_method(rb_klass, "width", RUBY_METHOD_FUNC(rb_width), 0);
326
+ rb_define_method(rb_klass, "width=", RUBY_METHOD_FUNC(rb_set_width), 1);
327
+ rb_define_method(rb_klass, "height", RUBY_METHOD_FUNC(rb_height), 0);
328
+ rb_define_method(rb_klass, "height=", RUBY_METHOD_FUNC(rb_set_height), 1);
329
+ rb_define_method(rb_klass, "center", RUBY_METHOD_FUNC(rb_center), 0);
330
+ rb_define_method(rb_klass, "points", RUBY_METHOD_FUNC(rb_points), 0);
331
+ rb_define_method(rb_klass, "top_left", RUBY_METHOD_FUNC(rb_top_left), 0);
332
+ rb_define_method(rb_klass, "top_right", RUBY_METHOD_FUNC(rb_top_right), 0);
333
+ rb_define_method(rb_klass, "bottom_left", RUBY_METHOD_FUNC(rb_bottom_left), 0);
334
+ rb_define_method(rb_klass, "bottom_right", RUBY_METHOD_FUNC(rb_bottom_right), 0);
335
+ }
336
+
337
+ __NAMESPACE_END_CVRECT
338
+ __NAMESPACE_END_OPENCV