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,58 @@
1
+ /************************************************************
2
+
3
+ cvsurfparams.h -
4
+
5
+ $Author: ser1zw $
6
+
7
+ Copyright (C) 2011 ser1zw
8
+
9
+ ************************************************************/
10
+ #ifndef RUBY_OPENCV_CVSURFPARAMS_H
11
+ #define RUBY_OPENCV_CVSURFPARAMS_H
12
+
13
+ #include "opencv.h"
14
+
15
+ #define __NAMESPACE_BEGIN_CVSURFPARAMS namespace cCvSURFParams {
16
+ #define __NAMESPACE_END_CVSURFPARAMS }
17
+
18
+ __NAMESPACE_BEGIN_OPENCV
19
+ __NAMESPACE_BEGIN_CVSURFPARAMS
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_get_hessian_threshold(VALUE self);
28
+ VALUE rb_set_hessian_threshold(VALUE self, VALUE value);
29
+ VALUE rb_get_extended(VALUE self);
30
+ VALUE rb_set_extended(VALUE self, VALUE value);
31
+ VALUE rb_get_n_octaves(VALUE self);
32
+ VALUE rb_set_n_octaves(VALUE self, VALUE value);
33
+ VALUE rb_get_n_octave_layers(VALUE self);
34
+ VALUE rb_set_n_octave_layers(VALUE self, VALUE value);
35
+
36
+ VALUE new_object(CvSURFPoint *cvsurfparams);
37
+
38
+ __NAMESPACE_END_CVSURFPARAMS
39
+
40
+ inline CvSURFParams*
41
+ CVSURFPARAMS(VALUE object)
42
+ {
43
+ CvSURFParams* ptr;
44
+ Data_Get_Struct(object, CvSURFParams, ptr);
45
+ return ptr;
46
+ }
47
+
48
+ inline CvSURFParams*
49
+ CVSURFPARAMS_WITH_CHECK(VALUE object)
50
+ {
51
+ if (!rb_obj_is_kind_of(object, cCvSURFParams::rb_class()))
52
+ raise_typeerror(object, cCvSURFParams::rb_class());
53
+ return CVSURFPARAMS(object);
54
+ }
55
+
56
+ __NAMESPACE_END_OPENCV
57
+
58
+ #endif // RUBY_OPENCV_CVSURFPARAMS_H
@@ -0,0 +1,279 @@
1
+ /************************************************************
2
+
3
+ cvsurfpoint.cpp -
4
+
5
+ $Author: ser1zw $
6
+
7
+ Copyright (C) 2011 ser1zw
8
+
9
+ ************************************************************/
10
+ #include "cvsurfpoint.h"
11
+ /*
12
+ * Document-class: OpenCV::CvSURFPoint
13
+ *
14
+ * C structure is here.
15
+ * typedef struct CvSURFPoint {
16
+ * CvPoint2D32f pt; // position of the feature within the image
17
+ * int laplacian; // -1, 0 or +1. sign of the laplacian at the point.
18
+ * // can be used to speedup feature comparison
19
+ * // (normally features with laplacians of different
20
+ * // signs can not match)
21
+ * int size; // size of the feature
22
+ * float dir; // orientation of the feature: 0..360 degrees
23
+ * float hessian; // value of the hessian (can be used to
24
+ * // approximately estimate the feature strengths)
25
+ * } CvSURFPoint;
26
+ */
27
+ __NAMESPACE_BEGIN_OPENCV
28
+ __NAMESPACE_BEGIN_CVSURFPOINT
29
+
30
+ VALUE rb_klass;
31
+
32
+ VALUE
33
+ rb_class()
34
+ {
35
+ return rb_klass;
36
+ }
37
+
38
+ VALUE
39
+ rb_allocate(VALUE klass)
40
+ {
41
+ CvSURFPoint *ptr;
42
+ return Data_Make_Struct(klass, CvSURFPoint, 0, -1, ptr);
43
+ }
44
+
45
+ /*
46
+ * Create a CvSURFPoint
47
+ *
48
+ * @overload new(pt, laplacian, size, dir, hessian)
49
+ * @param pt [CvPoint2D32f] Position of the feature within the image
50
+ * @param laplacian [Integer] -1, 0 or +1. sign of the laplacian at the point.
51
+ * Can be used to speedup feature comparison
52
+ * (normally features with laplacians of different signs can not match)
53
+ * @param size [Integer] Size of the feature
54
+ * @param dir [Number] Orientation of the feature: 0..360 degrees
55
+ * @param hessian [Number] Value of the hessian (can be used to
56
+ * approximately estimate the feature strengths)
57
+ * @return [CvSURFPoint] self
58
+ */
59
+ VALUE
60
+ rb_initialize(VALUE self, VALUE pt, VALUE laplacian, VALUE size, VALUE dir, VALUE hessian)
61
+ {
62
+ CvSURFPoint *self_ptr = CVSURFPOINT(self);
63
+ self_ptr->pt = VALUE_TO_CVPOINT2D32F(pt);
64
+ self_ptr->laplacian = NUM2INT(laplacian);
65
+ self_ptr->size = NUM2INT(size);
66
+ self_ptr->dir = (float)NUM2DBL(dir);
67
+ self_ptr->hessian = (float)NUM2DBL(hessian);
68
+
69
+ return self;
70
+ }
71
+
72
+ /*
73
+ * Return position of the feature as CvPoint2D32f.
74
+ *
75
+ * @overload pt
76
+ * @return [CvPoint2D32f] Position of the feature.
77
+ */
78
+ VALUE
79
+ rb_get_pt(VALUE self)
80
+ {
81
+ return REFER_OBJECT(cCvPoint2D32f::rb_class(), &CVSURFPOINT(self)->pt, self);
82
+ }
83
+
84
+ /*
85
+ * Set position of the feature.
86
+ *
87
+ * @overload pt=(value)
88
+ * @param value [CvPoint2D32f] Valuet to set.
89
+ */
90
+ VALUE
91
+ rb_set_pt(VALUE self, VALUE value)
92
+ {
93
+ CVSURFPOINT(self)->pt = VALUE_TO_CVPOINT2D32F(value);
94
+ return self;
95
+ }
96
+
97
+ /*
98
+ * Return sign of the laplacian at the point (-1, 0 or +1)
99
+ *
100
+ * @overload laplacian
101
+ * @return [Integer] Sign of the laplacian at the point.
102
+ */
103
+ VALUE
104
+ rb_get_laplacian(VALUE self)
105
+ {
106
+ return INT2NUM(CVSURFPOINT(self)->laplacian);
107
+ }
108
+
109
+ /*
110
+ * Set sign of the laplacian at the point
111
+ *
112
+ * @overload laplacian=(value)
113
+ * @param value [Integer] Value to set.
114
+ */
115
+ VALUE
116
+ rb_set_laplacian(VALUE self, VALUE value)
117
+ {
118
+ int val = NUM2INT(value);
119
+ CVSURFPOINT(self)->laplacian = (val > 0) ? 1 : (val < 0) ? -1 : 0;
120
+ return self;
121
+ }
122
+
123
+ /*
124
+ * Returns size of feature.
125
+ *
126
+ * @overload size
127
+ * @return [Integer] Size of feature.
128
+ */
129
+ VALUE
130
+ rb_get_size(VALUE self)
131
+ {
132
+ return INT2NUM(CVSURFPOINT(self)->size);
133
+ }
134
+
135
+ /*
136
+ * Return size of feature
137
+ *
138
+ * @overload size=(value)
139
+ * @param [Integer] Value to set.
140
+ */
141
+ VALUE
142
+ rb_set_size(VALUE self, VALUE value)
143
+ {
144
+ CVSURFPOINT(self)->size = NUM2INT(value);
145
+ return self;
146
+ }
147
+
148
+ /*
149
+ * Return orientation of the feature: 0..360 degrees
150
+ *
151
+ * @overload dir
152
+ * @return [Number] Orientation of the feature.
153
+ */
154
+ VALUE
155
+ rb_get_dir(VALUE self)
156
+ {
157
+ return DBL2NUM((double)(CVSURFPOINT(self)->dir));
158
+ }
159
+
160
+ /*
161
+ * Set orientation of the feature: 0..360 degrees.
162
+ *
163
+ * @overload dir=(value)
164
+ * @param [Number] Value to set.
165
+ */
166
+ VALUE
167
+ rb_set_dir(VALUE self, VALUE value)
168
+ {
169
+ CVSURFPOINT(self)->dir = (float)NUM2DBL(value);
170
+ return self;
171
+ }
172
+
173
+ /*
174
+ * Return value of the hessian
175
+ *
176
+ * @overload hessian
177
+ * @return [Number] Hessian
178
+ */
179
+ VALUE
180
+ rb_get_hessian(VALUE self)
181
+ {
182
+ return DBL2NUM((double)(CVSURFPOINT(self)->hessian));
183
+ }
184
+
185
+ /*
186
+ * Set value of the hessian
187
+ *
188
+ * @overload hessian=(value)
189
+ * @param [Number] Value to set.
190
+ */
191
+ VALUE
192
+ rb_set_hessian(VALUE self, VALUE value)
193
+ {
194
+ CVSURFPOINT(self)->hessian = (float)NUM2DBL(value);
195
+ return self;
196
+ }
197
+
198
+ /*
199
+ * call-seq:
200
+ *
201
+ *
202
+ * From: https://code.ros.org/trac/opencv/browser/trunk/opencv/samples/c/find_obj.cpp?rev=2065
203
+ */
204
+ VALUE
205
+ rb_flann(VALUE klass, VALUE objectDesc, VALUE imageDesc)
206
+ {
207
+ const cv::Mat m_object(CVMAT(objectDesc));
208
+ const cv::Mat m_image(CVMAT(imageDesc));
209
+
210
+ cv::Mat m_indices(m_object.rows, 2, CV_32S);
211
+ cv::Mat m_dists(m_object.rows, 2, CV_32F);
212
+
213
+ cv::flann::Index flann_index(m_image, cv::flann::KDTreeIndexParams(4)); // using 4 randomized kdtrees
214
+ flann_index.knnSearch(m_object, m_indices, m_dists, 2, cv::flann::SearchParams(64)); // maximum number of leafs checked
215
+
216
+ VALUE ptpairs = rb_ary_new();
217
+
218
+ int* indices_ptr = m_indices.ptr<int>(0);
219
+ float* dists_ptr = m_dists.ptr<float>(0);
220
+ for (int i = 0; i < m_indices.rows; ++i) {
221
+ if (dists_ptr[2 * i] < 0.6 * dists_ptr[2 * i + 1]) {
222
+ rb_ary_push(ptpairs, rb_int_new(i));
223
+ rb_ary_push(ptpairs, rb_int_new(indices_ptr[2 * i]));
224
+ }
225
+ }
226
+
227
+ return ptpairs;
228
+ }
229
+
230
+ VALUE
231
+ new_object()
232
+ {
233
+ return rb_allocate(rb_klass);
234
+ }
235
+
236
+ VALUE
237
+ new_object(CvSURFPoint* cvsurfpoint)
238
+ {
239
+ VALUE object = rb_allocate(rb_klass);
240
+ CvSURFPoint *ptr = CVSURFPOINT(object);
241
+ ptr = cvsurfpoint;
242
+ return object;
243
+ }
244
+
245
+ void
246
+ init_ruby_class()
247
+ {
248
+ #if 0
249
+ // For documentation using YARD
250
+ VALUE opencv = rb_define_module("OpenCV");
251
+ #endif
252
+
253
+ if (rb_klass)
254
+ return;
255
+ /*
256
+ * opencv = rb_define_module("OpenCV");
257
+ *
258
+ * note: this comment is used by rdoc.
259
+ */
260
+ VALUE opencv = rb_module_opencv();
261
+ rb_klass = rb_define_class_under(opencv, "CvSURFPoint", rb_cObject);
262
+ rb_define_alloc_func(rb_klass, rb_allocate);
263
+ rb_define_method(rb_klass, "initialize", RUBY_METHOD_FUNC(rb_initialize), 5);
264
+ rb_define_method(rb_klass, "pt", RUBY_METHOD_FUNC(rb_get_pt), 0);
265
+ rb_define_method(rb_klass, "pt=", RUBY_METHOD_FUNC(rb_set_pt), 1);
266
+ rb_define_method(rb_klass, "laplacian", RUBY_METHOD_FUNC(rb_get_laplacian), 0);
267
+ rb_define_method(rb_klass, "laplacian=", RUBY_METHOD_FUNC(rb_set_laplacian), 1);
268
+ rb_define_method(rb_klass, "size", RUBY_METHOD_FUNC(rb_get_size), 0);
269
+ rb_define_method(rb_klass, "size=", RUBY_METHOD_FUNC(rb_set_size), 1);
270
+ rb_define_method(rb_klass, "dir", RUBY_METHOD_FUNC(rb_get_dir), 0);
271
+ rb_define_method(rb_klass, "dir=", RUBY_METHOD_FUNC(rb_set_dir), 1);
272
+ rb_define_method(rb_klass, "hessian", RUBY_METHOD_FUNC(rb_get_hessian), 0);
273
+ rb_define_method(rb_klass, "hessian=", RUBY_METHOD_FUNC(rb_set_hessian), 1);
274
+ rb_define_singleton_method(rb_klass, "flann", RUBY_METHOD_FUNC(rb_flann), 2);
275
+ }
276
+
277
+ __NAMESPACE_END_CVSURFPOINT
278
+ __NAMESPACE_END_OPENCV
279
+
@@ -0,0 +1,54 @@
1
+ /************************************************************
2
+
3
+ cvsurfpoint.h -
4
+
5
+ $Author: ser1zw $
6
+
7
+ Copyright (C) 2011 ser1zw
8
+
9
+ ************************************************************/
10
+ #ifndef RUBY_OPENCV_CVSURFPOINT_H
11
+ #define RUBY_OPENCV_CVSURFPOINT_H
12
+
13
+ #include "opencv.h"
14
+
15
+ #define __NAMESPACE_BEGIN_CVSURFPOINT namespace cCvSURFPoint {
16
+ #define __NAMESPACE_END_CVSURFPOINT }
17
+
18
+ __NAMESPACE_BEGIN_OPENCV
19
+ __NAMESPACE_BEGIN_CVSURFPOINT
20
+
21
+ VALUE rb_class();
22
+
23
+ void init_ruby_class();
24
+
25
+ VALUE rb_allocate(VALUE klass);
26
+ VALUE rb_initialize(VALUE self, VALUE pt, VALUE laplacian, VALUE size, VALUE dir, VALUE hessian);
27
+ VALUE rb_get_pt(VALUE self);
28
+ VALUE rb_set_pt(VALUE self, VALUE value);
29
+ VALUE rb_get_laplacian(VALUE self);
30
+ VALUE rb_set_laplacian(VALUE self, VALUE value);
31
+ VALUE rb_get_size(VALUE self);
32
+ VALUE rb_set_size(VALUE self, VALUE value);
33
+ VALUE rb_get_dir(VALUE self);
34
+ VALUE rb_set_dir(VALUE self, VALUE value);
35
+ VALUE rb_get_hessian(VALUE self);
36
+ VALUE rb_set_hessian(VALUE self, VALUE value);
37
+
38
+ VALUE rb_flann(VALUE klass, VALUE objectDescriptors, VALUE imageDescriptors);
39
+
40
+ VALUE new_object(CvSURFPoint *cvsurfpoint);
41
+
42
+ __NAMESPACE_END_CVSURFPOINT
43
+
44
+ inline CvSURFPoint*
45
+ CVSURFPOINT(VALUE object)
46
+ {
47
+ CvSURFPoint* ptr;
48
+ Data_Get_Struct(object, CvSURFPoint, ptr);
49
+ return ptr;
50
+ }
51
+
52
+ __NAMESPACE_END_OPENCV
53
+
54
+ #endif // RUBY_OPENCV_CVSURFPOINT_H
@@ -0,0 +1,198 @@
1
+ /************************************************************
2
+
3
+ cvtermcriteria.cpp -
4
+
5
+ $Author: lsxi $
6
+
7
+ Copyright (C) 2005-2006 Masakazu Yonekura
8
+
9
+ ************************************************************/
10
+ #include "cvtermcriteria.h"
11
+ /*
12
+ * Document-class: OpenCV::CvTermCriteria
13
+ *
14
+ * CvTermCriteria has parameter "max" and "eps".
15
+ * "max" is the maximum repetition frequency.
16
+ * "eps" is a minimum difference value during current and previous state
17
+ * (It is different to which state "eps" refer depending on the method).
18
+ *
19
+ * Because the name of CvTermCriteria seems to be very long, it has alias named CvTerm.
20
+ */
21
+ __NAMESPACE_BEGIN_OPENCV
22
+ __NAMESPACE_BEGIN_CVTERMCRITERIA
23
+
24
+ VALUE rb_klass;
25
+
26
+ VALUE
27
+ rb_class()
28
+ {
29
+ return rb_klass;
30
+ }
31
+
32
+ VALUE
33
+ rb_allocate(VALUE klass)
34
+ {
35
+ CvTermCriteria *ptr;
36
+ return Data_Make_Struct(klass, CvTermCriteria, 0, -1, ptr);
37
+ }
38
+
39
+ /*
40
+ * call-seq:
41
+ * CvTermCriteria.new([max = 0][,eps = 0.0]) -> obj
42
+ * CvTermCriteria.new(int) = CvTermCriteria.new(int, 0.0)
43
+ * CvTermCriteria.new(float) = CvTermCriteria.new(0, float)
44
+ *
45
+ * Create new term criteria.
46
+ */
47
+ VALUE
48
+ rb_initialize(int argc, VALUE *argv, VALUE self)
49
+ {
50
+ VALUE max, eps;
51
+ rb_scan_args(argc, argv, "02", &max, &eps);
52
+ int type = 0;
53
+ if (!NIL_P(max))
54
+ type |= CV_TERMCRIT_ITER;
55
+ if (!NIL_P(eps))
56
+ type |= CV_TERMCRIT_EPS;
57
+ try {
58
+ *CVTERMCRITERIA(self) = cvTermCriteria(type, IF_INT(max, 0), IF_DBL(eps, 0.0));
59
+ }
60
+ catch (cv::Exception& e) {
61
+ raise_cverror(e);
62
+ }
63
+ return self;
64
+ }
65
+
66
+ /*
67
+ * call-seq:
68
+ * type -> int
69
+ *
70
+ * Return a combination of CV_TERMCRIT_ITER and CV_TERMCRIT_EPS
71
+ */
72
+ VALUE
73
+ rb_type(VALUE self)
74
+ {
75
+ return INT2NUM(CVTERMCRITERIA(self)->type);
76
+ }
77
+
78
+ /*
79
+ * call-seq:
80
+ * max -> int or nil
81
+ *
82
+ * Return the maximum repetition frequency.
83
+ */
84
+ VALUE
85
+ rb_max(VALUE self)
86
+ {
87
+ CvTermCriteria *ptr = CVTERMCRITERIA(self);
88
+ if (ptr->type & CV_TERMCRIT_ITER)
89
+ return INT2NUM(ptr->max_iter);
90
+ else
91
+ return Qnil;
92
+ }
93
+
94
+ /*
95
+ * call-seq:
96
+ * max = <i>val</i> -> self
97
+ *
98
+ * Set the maximum repetition frequency.
99
+ * If <i>val</i> is 0 (or negative value), repetition frequency is disregarded.
100
+ */
101
+ VALUE
102
+ rb_set_max(VALUE self, VALUE max_value)
103
+ {
104
+ CvTermCriteria *ptr = CVTERMCRITERIA(self);
105
+ int max = NUM2INT(max_value);
106
+ if (max > 0) {
107
+ ptr->type |= CV_TERMCRIT_ITER;
108
+ ptr->max_iter = max;
109
+ }
110
+ else {
111
+ ptr->type ^= CV_TERMCRIT_ITER;
112
+ ptr->max_iter = 0;
113
+ }
114
+ return self;
115
+ }
116
+
117
+ /*
118
+ * call-seq:
119
+ * eps -> float or nil
120
+ *
121
+ * Return the minimum difference value during current and previous state.
122
+ */
123
+ VALUE
124
+ rb_eps(VALUE self)
125
+ {
126
+ CvTermCriteria *ptr = CVTERMCRITERIA(self);
127
+ if (ptr->type & CV_TERMCRIT_EPS)
128
+ return rb_float_new(ptr->epsilon);
129
+ else
130
+ return Qnil;
131
+ }
132
+
133
+ /*
134
+ * call-seq:
135
+ * eps = <i>val</i> -> self
136
+ *
137
+ * Set the minimum difference value during current and previous state.
138
+ * If <i>val</i> is 0.0 (or negative value), the minimum difference value
139
+ * during current and previous state is disregarded.
140
+ */
141
+ VALUE
142
+ rb_set_eps(VALUE self, VALUE eps_value)
143
+ {
144
+ CvTermCriteria *ptr = CVTERMCRITERIA(self);
145
+ double eps = NUM2DBL(eps_value);
146
+ if (eps > 0) {
147
+ ptr->type = ptr->type | CV_TERMCRIT_EPS;
148
+ ptr->epsilon = eps;
149
+ }
150
+ else {
151
+ ptr->type = ptr->type ^ CV_TERMCRIT_EPS;
152
+ ptr->epsilon = 0;
153
+ }
154
+ return self;
155
+ }
156
+
157
+ VALUE
158
+ new_object(CvTermCriteria criteria)
159
+ {
160
+ VALUE object = rb_allocate(rb_klass);
161
+ *CVTERMCRITERIA(object) = criteria;
162
+ return object;
163
+ }
164
+
165
+ void
166
+ init_ruby_class()
167
+ {
168
+ #if 0
169
+ // For documentation using YARD
170
+ VALUE opencv = rb_define_module("OpenCV");
171
+ #endif
172
+
173
+ if (rb_klass)
174
+ return;
175
+ /*
176
+ * opencv = rb_define_module("OpenCV");
177
+ *
178
+ * note: this comment is used by rdoc.
179
+ */
180
+ VALUE opencv = rb_module_opencv();
181
+
182
+ rb_klass = rb_define_class_under(opencv, "CvTermCriteria", rb_cObject);
183
+ /* CvTermCriteria: class */
184
+ rb_define_const(opencv, "CvTerm", rb_klass);
185
+ rb_define_alloc_func(rb_klass, rb_allocate);
186
+ rb_define_method(rb_klass, "initialize", RUBY_METHOD_FUNC(rb_initialize), -1);
187
+ rb_define_method(rb_klass, "type", RUBY_METHOD_FUNC(rb_type), 0);
188
+ rb_define_method(rb_klass, "max", RUBY_METHOD_FUNC(rb_max), 0);
189
+ rb_define_method(rb_klass, "max=", RUBY_METHOD_FUNC(rb_set_max), 1);
190
+ rb_define_method(rb_klass, "eps", RUBY_METHOD_FUNC(rb_eps), 0);
191
+ rb_define_method(rb_klass, "eps=", RUBY_METHOD_FUNC(rb_set_eps), 1);
192
+ rb_define_alias(rb_klass, "epsilon", "eps");
193
+ rb_define_alias(rb_klass, "epsilon=", "eps=");
194
+ }
195
+
196
+ __NAMESPACE_END_CVTERMCRITERIA
197
+ __NAMESPACE_END_OPENCV
198
+