opencv 0.0.6

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 (117) hide show
  1. data/History.txt +5 -0
  2. data/License.txt +30 -0
  3. data/Manifest.txt +115 -0
  4. data/README.txt +47 -0
  5. data/Rakefile +34 -0
  6. data/examples/convexhull.rb +41 -0
  7. data/examples/face_detect.rb +25 -0
  8. data/examples/houghcircle.rb +23 -0
  9. data/examples/inpaint.png +0 -0
  10. data/examples/inpaint.rb +43 -0
  11. data/examples/paint.rb +72 -0
  12. data/examples/snake.rb +43 -0
  13. data/examples/stuff.jpg +0 -0
  14. data/ext/curve.cpp +103 -0
  15. data/ext/curve.h +34 -0
  16. data/ext/cvavgcomp.cpp +67 -0
  17. data/ext/cvavgcomp.h +39 -0
  18. data/ext/cvbox2d.cpp +114 -0
  19. data/ext/cvbox2d.h +53 -0
  20. data/ext/cvcapture.cpp +276 -0
  21. data/ext/cvcapture.h +54 -0
  22. data/ext/cvchain.cpp +184 -0
  23. data/ext/cvchain.h +43 -0
  24. data/ext/cvchaincode.cpp +49 -0
  25. data/ext/cvchaincode.h +43 -0
  26. data/ext/cvcircle32f.cpp +90 -0
  27. data/ext/cvcircle32f.h +53 -0
  28. data/ext/cvcondensation.cpp +230 -0
  29. data/ext/cvcondensation.h +49 -0
  30. data/ext/cvconnectedcomp.cpp +115 -0
  31. data/ext/cvconnectedcomp.h +46 -0
  32. data/ext/cvcontour.cpp +219 -0
  33. data/ext/cvcontour.h +47 -0
  34. data/ext/cvcontourtree.cpp +86 -0
  35. data/ext/cvcontourtree.h +41 -0
  36. data/ext/cvconvexitydefect.cpp +103 -0
  37. data/ext/cvconvexitydefect.h +42 -0
  38. data/ext/cverror.cpp +140 -0
  39. data/ext/cverror.h +79 -0
  40. data/ext/cvfont.cpp +173 -0
  41. data/ext/cvfont.h +56 -0
  42. data/ext/cvhaarclassifiercascade.cpp +159 -0
  43. data/ext/cvhaarclassifiercascade.h +41 -0
  44. data/ext/cvhistogram.cpp +200 -0
  45. data/ext/cvhistogram.h +51 -0
  46. data/ext/cvindex.cpp +73 -0
  47. data/ext/cvindex.h +40 -0
  48. data/ext/cvline.cpp +106 -0
  49. data/ext/cvline.h +52 -0
  50. data/ext/cvmat.cpp +4809 -0
  51. data/ext/cvmat.h +286 -0
  52. data/ext/cvmatnd.cpp +44 -0
  53. data/ext/cvmatnd.h +28 -0
  54. data/ext/cvmemstorage.cpp +64 -0
  55. data/ext/cvmemstorage.h +53 -0
  56. data/ext/cvmoments.cpp +204 -0
  57. data/ext/cvmoments.h +48 -0
  58. data/ext/cvpoint.cpp +229 -0
  59. data/ext/cvpoint.h +59 -0
  60. data/ext/cvpoint2d32f.cpp +213 -0
  61. data/ext/cvpoint2d32f.h +61 -0
  62. data/ext/cvpoint3d32f.cpp +245 -0
  63. data/ext/cvpoint3d32f.h +64 -0
  64. data/ext/cvrect.cpp +340 -0
  65. data/ext/cvrect.h +79 -0
  66. data/ext/cvscalar.cpp +227 -0
  67. data/ext/cvscalar.h +63 -0
  68. data/ext/cvseq.cpp +583 -0
  69. data/ext/cvseq.h +71 -0
  70. data/ext/cvset.cpp +63 -0
  71. data/ext/cvset.h +39 -0
  72. data/ext/cvsize.cpp +223 -0
  73. data/ext/cvsize.h +63 -0
  74. data/ext/cvsize2d32f.cpp +180 -0
  75. data/ext/cvsize2d32f.h +59 -0
  76. data/ext/cvslice.cpp +82 -0
  77. data/ext/cvslice.h +53 -0
  78. data/ext/cvsparsemat.cpp +44 -0
  79. data/ext/cvsparsemat.h +28 -0
  80. data/ext/cvtermcriteria.cpp +183 -0
  81. data/ext/cvtermcriteria.h +71 -0
  82. data/ext/cvtwopoints.cpp +98 -0
  83. data/ext/cvtwopoints.h +50 -0
  84. data/ext/cvvector.cpp +206 -0
  85. data/ext/cvvector.h +54 -0
  86. data/ext/cvvideowriter.cpp +116 -0
  87. data/ext/cvvideowriter.h +41 -0
  88. data/ext/extconf.rb +61 -0
  89. data/ext/gui.cpp +65 -0
  90. data/ext/gui.h +33 -0
  91. data/ext/iplconvkernel.cpp +177 -0
  92. data/ext/iplconvkernel.h +52 -0
  93. data/ext/iplimage.cpp +238 -0
  94. data/ext/iplimage.h +54 -0
  95. data/ext/mouseevent.cpp +184 -0
  96. data/ext/mouseevent.h +59 -0
  97. data/ext/opencv.cpp +481 -0
  98. data/ext/opencv.h +356 -0
  99. data/ext/point3dset.cpp +41 -0
  100. data/ext/point3dset.h +31 -0
  101. data/ext/pointset.cpp +238 -0
  102. data/ext/pointset.h +69 -0
  103. data/ext/trackbar.cpp +122 -0
  104. data/ext/trackbar.h +65 -0
  105. data/ext/window.cpp +368 -0
  106. data/ext/window.h +56 -0
  107. data/images/CvMat_sobel.png +0 -0
  108. data/images/CvMat_sub_rect.png +0 -0
  109. data/images/CvSeq_relationmap.png +0 -0
  110. data/images/face_detect_from_lena.jpg +0 -0
  111. data/lib/opencv.rb +3 -0
  112. data/lib/version.rb +3 -0
  113. data/setup/setup.cygwin.rb +120 -0
  114. data/setup/setup.mingw.rb +99 -0
  115. data/setup/setup.mswin32.rb +103 -0
  116. data/test/test_opencv.rb +4 -0
  117. metadata +191 -0
@@ -0,0 +1,52 @@
1
+ /************************************************************
2
+
3
+ iplconvkernel.h -
4
+
5
+ $Author: lsxi $
6
+
7
+ Copyright (C) 2005-2006 Masakazu Yonekura
8
+
9
+ ************************************************************/
10
+ #ifndef RUBY_OPENCV_IPLCONVKERNEL_H
11
+ #define RUBY_OPENCV_IPLCONVKERNEL_H
12
+
13
+ #include "opencv.h"
14
+
15
+ #define __NAMESPACE_BEGIN_IPLCONVKERNEL namespace cIplConvKernel{
16
+ #define __NAMESPACE_END_IPLCONVKERNEL }
17
+
18
+ __NAMESPACE_BEGIN_OPENCV
19
+ __NAMESPACE_BEGIN_IPLCONVKERNEL
20
+
21
+ VALUE rb_class();
22
+ VALUE rb_allocate(VALUE klass);
23
+
24
+ void define_ruby_class();
25
+ VALUE rb_initialize(int argc, VALUE *argv, VALUE self);
26
+ VALUE rb_size(VALUE self);
27
+ VALUE rb_cols(VALUE self);
28
+ VALUE rb_rows(VALUE self);
29
+ VALUE rb_anchor(VALUE self);
30
+ VALUE rb_anchor_x(VALUE self);
31
+ VALUE rb_anchor_y(VALUE self);
32
+
33
+ __NAMESPACE_END_IPLCONVKERNEL
34
+
35
+ inline IplConvKernel*
36
+ IPLCONVKERNEL(VALUE object)
37
+ {
38
+ IplConvKernel *ptr;
39
+ if (NIL_P(object))
40
+ return NULL;
41
+ else if (rb_obj_is_kind_of(object, cIplConvKernel::rb_class())) {
42
+ Data_Get_Struct(object, IplConvKernel, ptr);
43
+ return ptr;
44
+ } else {
45
+ rb_warn("invalid kernel. use default kernel (3x3 rectangle).");
46
+ return NULL;
47
+ }
48
+ }
49
+
50
+ __NAMESPACE_END_OPENCV
51
+
52
+ #endif // RUBY_OPENCV_IPLCONVKERNEL_H
@@ -0,0 +1,238 @@
1
+ /************************************************************
2
+
3
+ iplimage.cpp -
4
+
5
+ $Author: lsxi $
6
+
7
+ Copyright (C) 2005-2006 Masakazu Yonekura
8
+
9
+ ************************************************************/
10
+ #include "iplimage.h"
11
+ /*
12
+ * Document-class: OpenCV::IplImage
13
+ *
14
+ * IPL(Intel Image Processing Library) Image class.
15
+ *
16
+ * IplImage is subclass of CvMat. IplImage support ROI(region of interest) and COI(color of interest).
17
+ * Most of CvMat method support ROI, and some of CvMat method support COI.
18
+ *
19
+ * =What is ROI?
20
+ * region of interest.
21
+ *
22
+ * =What is COI?
23
+ * color of interest.
24
+ */
25
+ __NAMESPACE_BEGIN_OPENCV
26
+ __NAMESPACE_BEGIN_IPLIMAGE
27
+
28
+ VALUE rb_klass;
29
+
30
+ VALUE
31
+ rb_class()
32
+ {
33
+ return rb_klass;
34
+ }
35
+
36
+ void
37
+ define_ruby_class()
38
+ {
39
+ if (rb_klass)
40
+ return;
41
+ /*
42
+ * opencv = rb_define_module("OpenCV");
43
+ * cvmat = rb_define_class_under(opencv, "CvMat", rb_cObject);
44
+ *
45
+ * note: this comment is used by rdoc.
46
+ */
47
+ VALUE opencv = rb_module_opencv();
48
+ VALUE cvmat = cCvMat::rb_class();
49
+ rb_klass = rb_define_class_under(opencv, "IplImage", cvmat);
50
+ rb_define_alloc_func(rb_klass, rb_allocate);
51
+ rb_define_singleton_method(rb_klass, "load", RUBY_METHOD_FUNC(rb_load_image), -1);
52
+ rb_define_private_method(rb_klass, "initialize", RUBY_METHOD_FUNC(rb_initialize), -1);
53
+ rb_define_method(rb_klass, "get_roi", RUBY_METHOD_FUNC(rb_get_roi), 0);
54
+ rb_define_alias(rb_klass, "roi", "get_roi");
55
+ rb_define_method(rb_klass, "set_roi", RUBY_METHOD_FUNC(rb_set_roi), 1);
56
+ rb_define_alias(rb_klass, "roi=", "set_roi");
57
+ rb_define_method(rb_klass, "reset_roi", RUBY_METHOD_FUNC(rb_reset_roi), 0);
58
+ rb_define_method(rb_klass, "get_coi", RUBY_METHOD_FUNC(rb_get_coi), 0);
59
+ rb_define_alias(rb_klass, "coi", "get_coi");
60
+ rb_define_method(rb_klass, "set_coi", RUBY_METHOD_FUNC(rb_set_coi), 1);
61
+ rb_define_alias(rb_klass, "coi=", "set_coi");
62
+ rb_define_method(rb_klass, "reset_coi", RUBY_METHOD_FUNC(rb_reset_coi), 0);
63
+ }
64
+
65
+ VALUE
66
+ rb_allocate(VALUE klass)
67
+ {
68
+ return OPENCV_OBJECT(rb_klass, 0);
69
+ }
70
+
71
+ /*
72
+ * call-seq:
73
+ * new(<i>width, height[, depth = CV_8U][, channel = 3]</i>)
74
+ *
75
+ * Create width * height image. Each element-value set 0.
76
+ *
77
+ * Each element possigle range is set by <i>depth</i>. Default is unsigned 8bit.
78
+ *
79
+ * Number of channel is set by <i>channel</i>. <i>channel</i> should be 1..4.
80
+ *
81
+ * note: width = col, height = row, on CvMat. It is noted not to make a mistake
82
+ * because the order of arguument is differenct to CvMat.
83
+ */
84
+ VALUE
85
+ rb_initialize(int argc, VALUE *argv, VALUE self)
86
+ {
87
+ VALUE width, height, depth, channel;
88
+ rb_scan_args(argc, argv, "22", &width, &height, &depth, &channel);
89
+ int _depth = argc < 3 ? CV_8U : FIX2INT(depth);
90
+ int _channel = argc < 4 ? 3 : FIX2INT(channel);
91
+ DATA_PTR(self) = cvCreateImage(cvSize(FIX2INT(width), FIX2INT(height)), cvCvToIplDepth(_depth), _channel);
92
+ return self;
93
+ }
94
+
95
+ /*
96
+ * call-seq:
97
+ * IplImage::load(<i>filename[,iscolor = nil]</i>)
98
+ *
99
+ * Load an image from file.
100
+ * iscolor = true, the loaded image is forced to be color 3-channel image.
101
+ * iscolor = false, the loaded image is forced to be grayscale.
102
+ * iscolor = nil, the loaded image will be loaded as is (depend on the file).
103
+ * Currently the following file format are supported.
104
+ * * Windows bitmaps - BMP,DIB
105
+ * * JPEG files - JPEG,JPG,JPE
106
+ * * Portable Network Graphics - PNG
107
+ * * Portable image format - PBM,PGM,PPM
108
+ * * Sun rasters - SR,RAS
109
+ * * TIFF files - TIFF,TIF
110
+ */
111
+ VALUE
112
+ rb_load_image(int argc, VALUE *argv, VALUE self)
113
+ {
114
+ VALUE filename, iscolor;
115
+ rb_scan_args(argc, argv, "11", &filename, &iscolor);
116
+ Check_Type(filename, T_STRING);
117
+ int _iscolor;
118
+ switch (TYPE(iscolor)) {
119
+ case T_FALSE:
120
+ _iscolor = 0;
121
+ break;
122
+ case T_TRUE:
123
+ _iscolor = 1;
124
+ break;
125
+ case T_NIL:
126
+ _iscolor = -1;
127
+ break;
128
+ default:
129
+ rb_warn("argument 2 should be true(color)/false(non-color) or nil(auto).");
130
+ _iscolor = -1;
131
+ }
132
+ IplImage *image;
133
+ if ((image = cvLoadImage(StringValueCStr(filename), _iscolor)) == NULL) {
134
+ rb_raise(rb_eStandardError, "file does not exist or invalid format image.");
135
+ }
136
+ return OPENCV_OBJECT(rb_klass, image);
137
+ }
138
+
139
+ /*
140
+ * Get ROI as CvRect.
141
+ */
142
+ VALUE
143
+ rb_get_roi(VALUE self)
144
+ {
145
+ return cCvRect::new_object(cvGetImageROI(IPLIMAGE(self)));
146
+ }
147
+
148
+ /*
149
+ * call-seq:
150
+ * set_roi(<i>rect</i>)
151
+ * set_roi(<i>rect</i>){|image| ...}
152
+ *
153
+ * Set ROI. <i>rect</i> should be CvRect or compatible object.
154
+ * Return self.
155
+ */
156
+ VALUE
157
+ rb_set_roi(VALUE self, VALUE roi)
158
+ {
159
+ VALUE block = rb_block_given_p() ? rb_block_proc() : 0;
160
+ if (block) {
161
+ CvRect prev_roi = cvGetImageROI(IPLIMAGE(self));
162
+ cvSetImageROI(IPLIMAGE(self), VALUE_TO_CVRECT(roi));
163
+ rb_yield_values(1, self);
164
+ cvSetImageROI(IPLIMAGE(self), prev_roi);
165
+ } else {
166
+ cvSetImageROI(IPLIMAGE(self), VALUE_TO_CVRECT(roi));
167
+ }
168
+ return self;
169
+ }
170
+
171
+
172
+ /*
173
+ * Reset ROI setting. Same as IplImage#roi = nil. Return self.
174
+ */
175
+ VALUE
176
+ rb_reset_roi(VALUE self)
177
+ {
178
+ cvResetImageROI(IPLIMAGE(self));
179
+ return self;
180
+ }
181
+
182
+ /*
183
+ * Return COI as Fixnum.
184
+ */
185
+ VALUE
186
+ rb_get_coi(VALUE self)
187
+ {
188
+ return INT2FIX(cvGetImageCOI(IPLIMAGE(self)));
189
+ }
190
+
191
+ /*
192
+ * call-seq:
193
+ * set_coi(<i>coi</i>)
194
+ * set_coi(<i>coi</i>){|image| ...}
195
+ *
196
+ * Set COI. <i>coi</i> should be Fixnum.
197
+ * Return self.
198
+ */
199
+ VALUE
200
+ rb_set_coi(VALUE self, VALUE coi)
201
+ {
202
+ VALUE block = rb_block_given_p() ? rb_block_proc() : 0;
203
+ if (block) {
204
+ int prev_coi = cvGetImageCOI(IPLIMAGE(self));
205
+ cvSetImageCOI(IPLIMAGE(self), FIX2INT(coi));
206
+ rb_yield_values(1, self);
207
+ cvSetImageCOI(IPLIMAGE(self), prev_coi);
208
+ } else {
209
+ cvSetImageCOI(IPLIMAGE(self), FIX2INT(coi));
210
+ }
211
+ return self;
212
+ }
213
+
214
+ /*
215
+ * Reset COI setting. Same as IplImage#coi = 0. Return self.
216
+ */
217
+ VALUE
218
+ rb_reset_coi(VALUE self)
219
+ {
220
+ cvSetImageCOI(IPLIMAGE(self), 0);
221
+ return self;
222
+ }
223
+
224
+
225
+ VALUE
226
+ new_object(int width, int height, int type)
227
+ {
228
+ return OPENCV_OBJECT(rb_klass, cvCreateImage(cvSize(width, height), cvCvToIplDepth(type), CV_MAT_CN(type)));
229
+ }
230
+
231
+ VALUE
232
+ new_object(CvSize size, int type)
233
+ {
234
+ return OPENCV_OBJECT(rb_klass, cvCreateImage(size, cvCvToIplDepth(type), CV_MAT_CN(type)));
235
+ }
236
+
237
+ __NAMESPACE_END_IPLIMAGE
238
+ __NAMESPACE_END_OPENCV
@@ -0,0 +1,54 @@
1
+ /************************************************************
2
+
3
+ iplimage.h -
4
+
5
+ $Author: lsxi $
6
+
7
+ Copyright (C) 2005-2006 Masakazu Yonekura
8
+
9
+ ************************************************************/
10
+ #ifndef RUBY_OPENCV_IPLIMAGE_H
11
+ #define RUBY_OPENCV_IPLIMAGE_H
12
+
13
+ #include "opencv.h"
14
+
15
+ #define __NAMESPACE_BEGIN_IPLIMAGE namespace cIplImage{
16
+ #define __NAMESPACE_END_IPLIMAGE }
17
+
18
+ __NAMESPACE_BEGIN_OPENCV
19
+ __NAMESPACE_BEGIN_IPLIMAGE
20
+
21
+ VALUE rb_class();
22
+
23
+ void define_ruby_class();
24
+
25
+ VALUE rb_allocate(VALUE klass);
26
+ VALUE rb_initialize(int argc, VALUE *argv, VALUE self);
27
+
28
+ VALUE rb_load_image(int argc, VALUE *argv, VALUE self);
29
+
30
+ VALUE rb_color_model(VALUE self);
31
+
32
+ VALUE rb_get_roi(VALUE self);
33
+ VALUE rb_set_roi(VALUE self, VALUE roi);
34
+ VALUE rb_reset_roi(VALUE self);
35
+
36
+ VALUE rb_get_coi(VALUE self);
37
+ VALUE rb_set_coi(VALUE self, VALUE coi);
38
+ VALUE rb_reset_coi(VALUE self);
39
+
40
+ VALUE new_object(int width, int height, int type);
41
+ VALUE new_object(CvSize size, int type);
42
+ __NAMESPACE_END_IPLIMAGE
43
+
44
+ inline IplImage*
45
+ IPLIMAGE(VALUE object)
46
+ {
47
+ IplImage *ptr, stub;
48
+ Data_Get_Struct(object, IplImage, ptr);
49
+ return cvGetImage(ptr, &stub);
50
+ }
51
+
52
+ __NAMESPACE_END_OPENCV
53
+
54
+ #endif // RUBY_OPENCV_IPLIMAGE_H
@@ -0,0 +1,184 @@
1
+ /************************************************************
2
+
3
+ mouseevent.cpp -
4
+
5
+ $Author: lsxi $
6
+
7
+ Copyright (C) 2005-2007 Masakazu Yonekura
8
+
9
+ ************************************************************/
10
+ #ifdef HAVE_CALLBACK_H
11
+
12
+ #include "mouseevent.h"
13
+ /*
14
+ * Document-module: OpenCV::GUI::MouseEvent
15
+ *
16
+ * MouseEvent object.
17
+ * have
18
+ * see OpenCV::GUI::Window#set_mouse_callback.
19
+ */
20
+ __NAMESPACE_BEGIN_OPENCV
21
+ __NAMESPACE_BEGIN_GUI
22
+ __NAMESPACE_BEGIN_MOUSEEVENT
23
+
24
+ VALUE rb_klass;
25
+
26
+ VALUE
27
+ rb_class()
28
+ {
29
+ return rb_klass;
30
+ }
31
+
32
+ void
33
+ define_ruby_class()
34
+ {
35
+ if (rb_klass)
36
+ return;
37
+ /*
38
+ * opencv = rb_define_module("OpenCV");
39
+ * GUI = rb_define_module_under(opencv, "GUI");
40
+ * cvpoint = rb_define_class_under(opencv, "CvPoint", rb_cObject);
41
+ */
42
+ VALUE GUI = rb_module_GUI();
43
+ VALUE cvpoint = cCvPoint::rb_class();
44
+ rb_klass = rb_define_class_under(GUI, "MouseEvent", cvpoint);
45
+ rb_define_alloc_func(rb_klass, rb_allocate);
46
+ rb_define_method(rb_klass, "event", RUBY_METHOD_FUNC(rb_event), 0);
47
+ rb_define_method(rb_klass, "left_button?", RUBY_METHOD_FUNC(rb_left_button_q), 0);
48
+ rb_define_method(rb_klass, "right_button?", RUBY_METHOD_FUNC(rb_right_button_q), 0);
49
+ rb_define_method(rb_klass, "middle_button?", RUBY_METHOD_FUNC(rb_middle_button_q), 0);
50
+ rb_define_method(rb_klass, "ctrl_key?", RUBY_METHOD_FUNC(rb_ctrl_key_q), 0);
51
+ rb_define_method(rb_klass, "shift_key?", RUBY_METHOD_FUNC(rb_shift_key_q), 0);
52
+ rb_define_method(rb_klass, "alt_key?", RUBY_METHOD_FUNC(rb_alt_key_q), 0);
53
+ }
54
+
55
+ VALUE
56
+ rb_allocate(VALUE klass)
57
+ {
58
+ MouseEvent *ptr;
59
+ return Data_Make_Struct(klass, MouseEvent, 0, -1, ptr);
60
+ }
61
+
62
+ /*
63
+ * call-seq:
64
+ * event -> symbol
65
+ *
66
+ * Return Symbol about mouse event.
67
+ *
68
+ * Currently, return these symbol:
69
+ * :move
70
+ * When mouse move.
71
+ * :right_button_down
72
+ * When mouse right button down.
73
+ * :left_button_down
74
+ * When mosue left button down.
75
+ * :middle_button_down
76
+ * When mosue middle button down.
77
+ * :left_button_up
78
+ * When mouse left button down.
79
+ * :right_button_up
80
+ * When mouse right button down.
81
+ * :middle_button_up
82
+ * When mouse middle button down.
83
+ *
84
+ * note: original OpenCV define "double-click" event(e.g. CV_EVENT_LBUTTONDBLCLK).
85
+ * But never call these event. Is it bug?
86
+ */
87
+ VALUE rb_event(VALUE self)
88
+ {
89
+ switch(MOUSEEVENT(self)->event) {
90
+ case CV_EVENT_MOUSEMOVE:
91
+ return ID2SYM(rb_intern("move"));
92
+ case CV_EVENT_LBUTTONDOWN:
93
+ return ID2SYM(rb_intern("left_button_down"));
94
+ case CV_EVENT_RBUTTONDOWN:
95
+ return ID2SYM(rb_intern("right_button_down"));
96
+ case CV_EVENT_MBUTTONDOWN:
97
+ return ID2SYM(rb_intern("middle_button_down"));
98
+ case CV_EVENT_LBUTTONUP:
99
+ return ID2SYM(rb_intern("left_button_up"));
100
+ case CV_EVENT_RBUTTONUP:
101
+ return ID2SYM(rb_intern("right_button_up"));
102
+ case CV_EVENT_MBUTTONUP:
103
+ return ID2SYM(rb_intern("middle_button_up"));
104
+ case CV_EVENT_LBUTTONDBLCLK:
105
+ return ID2SYM(rb_intern("left_button_double_click"));
106
+ case CV_EVENT_RBUTTONDBLCLK:
107
+ return ID2SYM(rb_intern("right_button_double_click"));
108
+ case CV_EVENT_MBUTTONDBLCLK:
109
+ return ID2SYM(rb_intern("middle_button_double_click"));
110
+ }
111
+ return Qnil;
112
+ }
113
+
114
+ /*
115
+ * Return true when mouse left button is pushed. Otherwise return false.
116
+ */
117
+ VALUE
118
+ rb_left_button_q(VALUE self)
119
+ {
120
+ return MOUSEEVENT(self)->flag & CV_EVENT_FLAG_LBUTTON ? Qtrue : Qfalse;
121
+ }
122
+
123
+ /*
124
+ * Return true when mouse right button is pushed. Otherwise return false.
125
+ */
126
+ VALUE
127
+ rb_right_button_q(VALUE self)
128
+ {
129
+ return MOUSEEVENT(self)->flag & CV_EVENT_FLAG_RBUTTON ? Qtrue : Qfalse;
130
+ }
131
+
132
+ /*
133
+ * Return true when mouse middle button is pushed. Otherwise return false.
134
+ */
135
+ VALUE
136
+ rb_middle_button_q(VALUE self)
137
+ {
138
+ return MOUSEEVENT(self)->flag & CV_EVENT_FLAG_MBUTTON ? Qtrue : Qfalse;
139
+ }
140
+
141
+ /*
142
+ * Return true when CTRL key is pushed. Otherwise return false.
143
+ */
144
+ VALUE
145
+ rb_ctrl_key_q(VALUE self)
146
+ {
147
+ return MOUSEEVENT(self)->flag & CV_EVENT_FLAG_CTRLKEY ? Qtrue : Qfalse;
148
+ }
149
+
150
+ /*
151
+ * Return true when shift key is pushed. Otherwise return false.
152
+ */
153
+ VALUE
154
+ rb_shift_key_q(VALUE self)
155
+ {
156
+ return MOUSEEVENT(self)->flag & CV_EVENT_FLAG_SHIFTKEY ? Qtrue : Qfalse;
157
+ }
158
+
159
+ /*
160
+ * Return true when ALT key is pushed. Otherwise return false.
161
+ */
162
+ VALUE
163
+ rb_alt_key_q(VALUE self)
164
+ {
165
+ return MOUSEEVENT(self)->flag & CV_EVENT_FLAG_ALTKEY ? Qtrue : Qfalse;
166
+ }
167
+
168
+ VALUE
169
+ new_object(int flag, int y, int x, int event)
170
+ {
171
+ VALUE object = rb_allocate(rb_class());
172
+ MouseEvent *mouseevent = MOUSEEVENT(object);
173
+ mouseevent->point.x = x;
174
+ mouseevent->point.y = y;
175
+ mouseevent->event = event;
176
+ mouseevent->flag = flag;
177
+ return object;
178
+ }
179
+
180
+ __NAMESPACE_END_MOUSEEVENT
181
+ __NAMESPACE_END_GUI
182
+ __NAMESPACE_END_OPENCV
183
+
184
+ #endif // HAVE_CALLBACK_H