opencv 0.0.6

Sign up to get free protection for your applications and to get access to all the features.
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