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.
- 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
|