opencv 0.0.6
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +5 -0
- data/License.txt +30 -0
- data/Manifest.txt +115 -0
- data/README.txt +47 -0
- data/Rakefile +34 -0
- data/examples/convexhull.rb +41 -0
- data/examples/face_detect.rb +25 -0
- data/examples/houghcircle.rb +23 -0
- data/examples/inpaint.png +0 -0
- data/examples/inpaint.rb +43 -0
- data/examples/paint.rb +72 -0
- data/examples/snake.rb +43 -0
- data/examples/stuff.jpg +0 -0
- data/ext/curve.cpp +103 -0
- data/ext/curve.h +34 -0
- data/ext/cvavgcomp.cpp +67 -0
- data/ext/cvavgcomp.h +39 -0
- data/ext/cvbox2d.cpp +114 -0
- data/ext/cvbox2d.h +53 -0
- data/ext/cvcapture.cpp +276 -0
- data/ext/cvcapture.h +54 -0
- data/ext/cvchain.cpp +184 -0
- data/ext/cvchain.h +43 -0
- data/ext/cvchaincode.cpp +49 -0
- data/ext/cvchaincode.h +43 -0
- data/ext/cvcircle32f.cpp +90 -0
- data/ext/cvcircle32f.h +53 -0
- data/ext/cvcondensation.cpp +230 -0
- data/ext/cvcondensation.h +49 -0
- data/ext/cvconnectedcomp.cpp +115 -0
- data/ext/cvconnectedcomp.h +46 -0
- data/ext/cvcontour.cpp +219 -0
- data/ext/cvcontour.h +47 -0
- data/ext/cvcontourtree.cpp +86 -0
- data/ext/cvcontourtree.h +41 -0
- data/ext/cvconvexitydefect.cpp +103 -0
- data/ext/cvconvexitydefect.h +42 -0
- data/ext/cverror.cpp +140 -0
- data/ext/cverror.h +79 -0
- data/ext/cvfont.cpp +173 -0
- data/ext/cvfont.h +56 -0
- data/ext/cvhaarclassifiercascade.cpp +159 -0
- data/ext/cvhaarclassifiercascade.h +41 -0
- data/ext/cvhistogram.cpp +200 -0
- data/ext/cvhistogram.h +51 -0
- data/ext/cvindex.cpp +73 -0
- data/ext/cvindex.h +40 -0
- data/ext/cvline.cpp +106 -0
- data/ext/cvline.h +52 -0
- data/ext/cvmat.cpp +4809 -0
- data/ext/cvmat.h +286 -0
- data/ext/cvmatnd.cpp +44 -0
- data/ext/cvmatnd.h +28 -0
- data/ext/cvmemstorage.cpp +64 -0
- data/ext/cvmemstorage.h +53 -0
- data/ext/cvmoments.cpp +204 -0
- data/ext/cvmoments.h +48 -0
- data/ext/cvpoint.cpp +229 -0
- data/ext/cvpoint.h +59 -0
- data/ext/cvpoint2d32f.cpp +213 -0
- data/ext/cvpoint2d32f.h +61 -0
- data/ext/cvpoint3d32f.cpp +245 -0
- data/ext/cvpoint3d32f.h +64 -0
- data/ext/cvrect.cpp +340 -0
- data/ext/cvrect.h +79 -0
- data/ext/cvscalar.cpp +227 -0
- data/ext/cvscalar.h +63 -0
- data/ext/cvseq.cpp +583 -0
- data/ext/cvseq.h +71 -0
- data/ext/cvset.cpp +63 -0
- data/ext/cvset.h +39 -0
- data/ext/cvsize.cpp +223 -0
- data/ext/cvsize.h +63 -0
- data/ext/cvsize2d32f.cpp +180 -0
- data/ext/cvsize2d32f.h +59 -0
- data/ext/cvslice.cpp +82 -0
- data/ext/cvslice.h +53 -0
- data/ext/cvsparsemat.cpp +44 -0
- data/ext/cvsparsemat.h +28 -0
- data/ext/cvtermcriteria.cpp +183 -0
- data/ext/cvtermcriteria.h +71 -0
- data/ext/cvtwopoints.cpp +98 -0
- data/ext/cvtwopoints.h +50 -0
- data/ext/cvvector.cpp +206 -0
- data/ext/cvvector.h +54 -0
- data/ext/cvvideowriter.cpp +116 -0
- data/ext/cvvideowriter.h +41 -0
- data/ext/extconf.rb +61 -0
- data/ext/gui.cpp +65 -0
- data/ext/gui.h +33 -0
- data/ext/iplconvkernel.cpp +177 -0
- data/ext/iplconvkernel.h +52 -0
- data/ext/iplimage.cpp +238 -0
- data/ext/iplimage.h +54 -0
- data/ext/mouseevent.cpp +184 -0
- data/ext/mouseevent.h +59 -0
- data/ext/opencv.cpp +481 -0
- data/ext/opencv.h +356 -0
- data/ext/point3dset.cpp +41 -0
- data/ext/point3dset.h +31 -0
- data/ext/pointset.cpp +238 -0
- data/ext/pointset.h +69 -0
- data/ext/trackbar.cpp +122 -0
- data/ext/trackbar.h +65 -0
- data/ext/window.cpp +368 -0
- data/ext/window.h +56 -0
- data/images/CvMat_sobel.png +0 -0
- data/images/CvMat_sub_rect.png +0 -0
- data/images/CvSeq_relationmap.png +0 -0
- data/images/face_detect_from_lena.jpg +0 -0
- data/lib/opencv.rb +3 -0
- data/lib/version.rb +3 -0
- data/setup/setup.cygwin.rb +120 -0
- data/setup/setup.mingw.rb +99 -0
- data/setup/setup.mswin32.rb +103 -0
- data/test/test_opencv.rb +4 -0
- metadata +191 -0
data/ext/iplconvkernel.h
ADDED
@@ -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
|
data/ext/iplimage.cpp
ADDED
@@ -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
|
data/ext/iplimage.h
ADDED
@@ -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
|
data/ext/mouseevent.cpp
ADDED
@@ -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
|