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,54 @@
1
+ /************************************************************
2
+
3
+ cvvector.h -
4
+
5
+ $Author: lsxi $
6
+
7
+ Copyright (C) 2007 Masakazu Yonekura
8
+
9
+ ************************************************************/
10
+ #ifndef RUBY_OPENCV_CVVECTOR_H
11
+ #define RUBY_OPENCV_CVVECTOR_H
12
+
13
+ #include "opencv.h"
14
+
15
+ #define __NAMESPACE_BEGIN_CVVECTOR namespace cCvVector{
16
+ #define __NAMESPACE_END_CVVECTOR }
17
+
18
+ typedef struct CvVector{
19
+ float x;
20
+ float y;
21
+ } CvVector;
22
+
23
+ __NAMESPACE_BEGIN_OPENCV
24
+ __NAMESPACE_BEGIN_CVVECTOR
25
+
26
+ VALUE rb_class();
27
+
28
+ void define_ruby_class();
29
+
30
+ VALUE rb_compatible_q(VALUE klass, VALUE object);
31
+
32
+ VALUE rb_allocate(VALUE klass);
33
+ VALUE rb_initialize(int argc, VALUE *argv, VALUE self);
34
+ VALUE rb_x(VALUE self);
35
+ VALUE rb_set_x(VALUE self, VALUE x);
36
+ VALUE rb_y(VALUE self);
37
+ VALUE rb_set_y(VALUE self, VALUE y);
38
+
39
+ VALUE rb_to_s(VALUE self);
40
+ VALUE rb_to_ary(VALUE self);
41
+
42
+ VALUE new_object(CvVector vector);
43
+
44
+ __NAMESPACE_END_CVVECTOR
45
+
46
+ inline CvVector *CVVECTOR(VALUE object){
47
+ CvVector *ptr;
48
+ Data_Get_Struct(object, CvVector, ptr);
49
+ return ptr;
50
+ }
51
+
52
+ __NAMESPACE_END_OPENCV
53
+
54
+ #endif // RUBY_OPENCV_CVVECTOR_H
@@ -0,0 +1,116 @@
1
+ /************************************************************
2
+
3
+ cvvideowriter.cpp -
4
+
5
+ $Author: lsxi $
6
+
7
+ Copyright (C) 2005-2006 Masakazu Yonekura
8
+
9
+ ************************************************************/
10
+ #include "cvvideowriter.h"
11
+ /*
12
+ * Document-class: OpenCV::CvVideoWriter
13
+ *
14
+ * Create video stream from images.
15
+ *
16
+ * C structure is "black box".
17
+ */
18
+ __NAMESPACE_BEGIN_OPENCV
19
+ __NAMESPACE_BEGIN_CVVIDEOWRITER
20
+
21
+ VALUE rb_klass;
22
+
23
+ VALUE
24
+ rb_class()
25
+ {
26
+ return rb_klass;
27
+ }
28
+
29
+ void
30
+ define_ruby_class()
31
+ {
32
+ if(rb_klass)
33
+ return;
34
+ /*
35
+ * opencv = rb_define_module("OpenCV");
36
+ *
37
+ * note: this comment is used by rdoc.
38
+ */
39
+ VALUE opencv = rb_module_opencv();
40
+ rb_klass = rb_define_class_under(opencv, "CvVideoWriter", rb_cObject);
41
+ rb_define_private_method(rb_klass, "initialize", RUBY_METHOD_FUNC(rb_initialize), -1);
42
+ rb_define_method(rb_klass, "write", RUBY_METHOD_FUNC(rb_write), 1);
43
+ rb_define_method(rb_klass, "close", RUBY_METHOD_FUNC(rb_close), 0);
44
+ }
45
+
46
+ /*
47
+ * call-seq:
48
+ * CvVideoWriter.new(<i>filanem, fourcc, fps, size</i>) -> cvvideowriter
49
+ * CvVideoWriter.new(<i>filanem, fourcc, fps, size</i>){|vw| ... } -> nil
50
+ *
51
+ * Open new video writer. If block given, writer is closed automatically when end of block.
52
+ *
53
+ * note: if <i>fourcc</i> is nil, popup codec select dialog (Windows only).
54
+ */
55
+ VALUE
56
+ rb_initialize(int argc, VALUE *argv, VALUE self)
57
+ {
58
+ VALUE filename, fourcc, fps, size;
59
+ rb_scan_args(argc, argv, "40", &filename, &fourcc, &fps, &size);
60
+ char codec[4] = {' ', ' ', ' ', ' '};
61
+ int codec_number;
62
+ Check_Type(filename, T_STRING);
63
+ if (RSTRING(filename)->len == 0)
64
+ rb_raise(rb_eArgError, "argument 1 (file name) dose not given");
65
+ if (NIL_P(fourcc))
66
+ codec_number = -1;
67
+ else {
68
+ Check_Type(fourcc, T_STRING);
69
+ if (RSTRING(fourcc)->len > 4)
70
+ rb_raise(rb_eStandardError, "argument 2 (fourcc) should be specific 4-character. (i.e \"PIM1\",\"MJPG\")");
71
+ else {
72
+ for (int i = 0; i < RSTRING(fourcc)->len; i++)
73
+ codec[i] = RSTRING(fourcc)->ptr[i];
74
+ codec_number = CV_FOURCC(codec[0], codec[1], codec[2], codec[3]);
75
+ }
76
+ }
77
+ DATA_PTR(self) = cvCreateVideoWriter(StringValueCStr(filename), codec_number, FIX2INT(fps), VALUE_TO_CVSIZE(size));
78
+ if (rb_block_given_p()) {
79
+ rb_yield(self);
80
+ rb_close(self);
81
+ return Qnil;
82
+ } else {
83
+ return self;
84
+ }
85
+ }
86
+
87
+ /*
88
+ * call-seq:
89
+ * write(<i>frame</i>)
90
+ *
91
+ * Write image as frame of video stream.
92
+ * <i>frame</i> should be CvMat or subclass.
93
+ */
94
+ VALUE
95
+ rb_write(VALUE self, VALUE frame)
96
+ {
97
+ if (!rb_obj_is_kind_of(frame, cCvMat::rb_class()))
98
+ rb_raise(rb_eTypeError, "argument 1 (frame) should be %s or subclass", rb_class2name(cCvMat::rb_class()));
99
+ cvWriteFrame(CVVIDEOWRITER(self), IPLIMAGE(frame));
100
+ return self;
101
+ }
102
+
103
+ /*
104
+ * Close vidoe writer.
105
+ */
106
+ VALUE
107
+ rb_close(VALUE self)
108
+ {
109
+ CvVideoWriter *writer = CVVIDEOWRITER(self);
110
+ cvReleaseVideoWriter(&writer);
111
+ return Qnil;
112
+ }
113
+
114
+
115
+ __NAMESPACE_END_CVVIDEOWRITER
116
+ __NAMESPACE_END_OPENCV
@@ -0,0 +1,41 @@
1
+ /************************************************************
2
+
3
+ cvvideowriter.h -
4
+
5
+ $Author: lsxi $
6
+
7
+ Copyright (C) 2005-2006 Masakazu Yonekura
8
+
9
+ ************************************************************/
10
+ #ifndef RUBY_OPENCV_CVVIDEOWRITER_H
11
+ #define RUBY_OPENCV_CVVIDEOWRITER_H
12
+
13
+ #include "opencv.h"
14
+
15
+ #define __NAMESPACE_BEGIN_CVVIDEOWRITER namespace cCvVideoWriter{
16
+ #define __NAMESPACE_END_CVVIDEOWRITER }
17
+
18
+ __NAMESPACE_BEGIN_OPENCV
19
+ __NAMESPACE_BEGIN_CVVIDEOWRITER
20
+
21
+ VALUE rb_class();
22
+
23
+ void define_ruby_class();
24
+
25
+ VALUE rb_initialize(int argc, VALUE *argv, VALUE self);
26
+ VALUE rb_write(VALUE self, VALUE frame);
27
+ VALUE rb_close(VALUE self);
28
+
29
+ __NAMESPACE_END_CVVIDEOWRITER
30
+
31
+ inline CvVideoWriter*
32
+ CVVIDEOWRITER(VALUE object)
33
+ {
34
+ CvVideoWriter *ptr;
35
+ Data_Get_Struct(object, CvVideoWriter, ptr);
36
+ return ptr;
37
+ }
38
+
39
+ __NAMESPACE_END_OPENCV
40
+
41
+ #endif // RUBY_OPENCV_CVVIDEOWRITER_H
@@ -0,0 +1,61 @@
1
+ #!/usr/env ruby
2
+ #/usr/local/bin/ruby
3
+ =begin
4
+ create Makefile script for Ruby/OpenCV
5
+
6
+ usage : ruby extconf.rb
7
+ make && make install
8
+
9
+ VC : ruby extconf.rb
10
+ nmake
11
+ =end
12
+ require "mkmf"
13
+
14
+ # option "opencv"
15
+ # extconf.rb --with-opencv-lib=/path/to/opencv/lib
16
+ # extconf.rb --with-opencv-include=/path/to/opencv/include
17
+
18
+ dir_config("opencv", "/usr/local/include/opencv", "/usr/local/lib")
19
+ dir_config("ffcall", "/usr/local/include", "/usr/local/lib")
20
+
21
+ opencv_libraries = ["cxcore", "cv", "highgui"]
22
+
23
+ puts ">> check require libraries..."
24
+ case CONFIG["arch"]
25
+ when /mswin32/
26
+ have_library("msvcrt", nil)
27
+ opencv_libraries.each{|lib|
28
+ have_library(lib)
29
+ }
30
+ else
31
+ opencv_libraries.each{|lib|
32
+ raise "lib#{lib} not found." unless have_library(lib)
33
+ }
34
+ #have_library("ml")
35
+ have_library("stdc++")
36
+ end
37
+
38
+ # check require headers
39
+ puts ">> check require headers..."
40
+ opencv_libraries.map{|lib| "#{lib}.h"}.each{|header|
41
+ raise "#{header} not found." unless have_header(header)
42
+ }
43
+ #have_header("ml.h")
44
+ have_header("stdarg.h")
45
+
46
+ # check require functions.
47
+ # todo
48
+
49
+ # optional libraies check.
50
+ puts ">> ----- optional -----"
51
+ puts ">> check ffcall..."
52
+ # check ffcall
53
+ if have_library("callback") && have_header("callback.h")
54
+ puts ">> support OpenCV::GUI"
55
+ else
56
+ puts ">> ! unsupport OpenCV::GUI (if need it. install ffcall)"
57
+ puts "http://www.haible.de/bruno/packages-ffcall.html"
58
+ end
59
+
60
+ # step-final. create Makefile
61
+ create_makefile("opencv")
@@ -0,0 +1,65 @@
1
+ /************************************************************
2
+
3
+ gui.cpp -
4
+
5
+ $Author: lsxi $
6
+
7
+ Copyright (C) 2005-2006 Masakazu Yonekura
8
+
9
+ ************************************************************/
10
+ #ifdef HAVE_CALLBACK_H
11
+
12
+ #include "gui.h"
13
+ /*
14
+ * Document-module: OpenCV::GUI
15
+ *
16
+ * OpenCV simple GUI interface. Provides Window, Trackbar.
17
+ * This GUI work on GTK or Microsoft Windows native GUI.
18
+ */
19
+ __NAMESPACE_BEGIN_OPENCV
20
+ __NAMESPACE_BEGIN_GUI
21
+
22
+ VALUE rb_module;
23
+
24
+ VALUE
25
+ rb_module_GUI()
26
+ {
27
+ return rb_module;
28
+ }
29
+
30
+ void
31
+ define_ruby_module()
32
+ {
33
+ if(rb_module)
34
+ return;
35
+ /*
36
+ * opencv = rb_define_module("OpenCV");
37
+ *
38
+ * note: this comment is used by rdoc.
39
+ */
40
+ VALUE opencv = rb_module_opencv();
41
+ rb_module = rb_define_module_under(opencv, "GUI");
42
+ rb_define_singleton_method(rb_module, "wait_key", RUBY_METHOD_FUNC(rb_wait_key), -1);
43
+ }
44
+
45
+ /*
46
+ * call-seq:
47
+ * wait_key(<i>[delay]</i>) -> int or nil
48
+ *
49
+ * Waits for a pressed key each GUI wedget.
50
+ * Return the code of the pressed key or nil if no key were pressed until the specified timeout has elapsed.
51
+ * <i>delay</i> should be Fixnum. Wait <i>delay</i> millisecond.
52
+ */
53
+ VALUE
54
+ rb_wait_key(int argc, VALUE *argv, VALUE self)
55
+ {
56
+ VALUE delay;
57
+ rb_scan_args(argc, argv, "01", &delay);
58
+ int keycode = 0;
59
+ return ((keycode = cvWaitKey(IF_INT(delay, 0))) < 0) ? Qnil : INT2FIX(keycode);
60
+ }
61
+
62
+ __NAMESPACE_END_GUI
63
+ __NAMESPACE_END_OPENCV
64
+
65
+ #endif // HAVE_CALLBACK_H
@@ -0,0 +1,33 @@
1
+ /************************************************************
2
+
3
+ gui.h -
4
+
5
+ $Author: lsxi $
6
+
7
+ Copyright (C) 2005-2006 Masakazu Yonekura
8
+
9
+ ************************************************************/
10
+ #ifdef HAVE_CALLBACK_H
11
+
12
+ #define __NAMESPACE_BEGIN_GUI namespace mGUI{
13
+ #define __NAMESPACE_END_GUI }
14
+
15
+ #ifndef RUBY_OPENCV_GUI_H
16
+ #define RUBY_OPENCV_GUI_H
17
+
18
+ #include "opencv.h"
19
+
20
+ __NAMESPACE_BEGIN_OPENCV
21
+ __NAMESPACE_BEGIN_GUI
22
+
23
+ VALUE rb_module_GUI();
24
+ void define_ruby_module();
25
+
26
+ VALUE rb_wait_key(int argc, VALUE *argv, VALUE self);
27
+
28
+ __NAMESPACE_END_GUI
29
+ __NAMESPACE_END_OPENCV
30
+
31
+ #endif // RUBY_OPENCV_GUI_H
32
+
33
+ #endif // HAVE_CALLBACK_H
@@ -0,0 +1,177 @@
1
+ /************************************************************
2
+
3
+ iplconvkernel.cpp -
4
+
5
+ $Author: lsxi $
6
+
7
+ Copyright (C) 2005-2006 Masakazu Yonekura
8
+
9
+ ************************************************************/
10
+ #include"iplconvkernel.h"
11
+ /*
12
+ * Document-class: OpenCV::IplConvKernel
13
+ *
14
+ * Structuring element can be used in the morphological operations.
15
+ *
16
+ * CvMat#erode, CvMat#dilate, CvMat#morphology_open, CvMat#morphology_close,
17
+ * CvMat#morphology_gradient, CvMat#morphology_tophat, CvMat#morphology_blackhat
18
+ *
19
+ * Create by IplConvKernel.new or CvMat#to_IplConvKernel
20
+ */
21
+ __NAMESPACE_BEGIN_OPENCV
22
+ __NAMESPACE_BEGIN_IPLCONVKERNEL
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
+ *
40
+ * note: this comment is used by rdoc.
41
+ */
42
+ VALUE opencv = rb_module_opencv();
43
+ rb_klass = rb_define_class_under(opencv, "IplConvKernel", rb_cObject);
44
+ rb_define_alloc_func(rb_klass, rb_allocate);
45
+
46
+ rb_define_private_method(rb_klass, "initialize", RUBY_METHOD_FUNC(rb_initialize), -1);
47
+ rb_define_method(rb_klass, "size", RUBY_METHOD_FUNC(rb_size), 0);
48
+ rb_define_method(rb_klass, "cols", RUBY_METHOD_FUNC(rb_cols), 0);
49
+ rb_define_alias(rb_klass, "columns", "cols");
50
+ rb_define_method(rb_klass, "rows", RUBY_METHOD_FUNC(rb_rows), 0);
51
+ rb_define_method(rb_klass, "anchor", RUBY_METHOD_FUNC(rb_anchor), 0);
52
+ rb_define_method(rb_klass, "anchor_x", RUBY_METHOD_FUNC(rb_anchor_x), 0);
53
+ rb_define_method(rb_klass, "anchor_y", RUBY_METHOD_FUNC(rb_anchor_y), 0);
54
+ }
55
+
56
+ VALUE
57
+ rb_allocate(VALUE klass)
58
+ {
59
+ return OPENCV_OBJECT(klass, 0);
60
+ }
61
+
62
+ /*
63
+ * call-seq:
64
+ * IplConvKernel.new(shape, rows, cols, anchor_x, anchor_y)
65
+ *
66
+ * Creates structuring element.
67
+ * shape
68
+ * Shape of the structuring element; may have the following values:
69
+ * :rect
70
+ * :cross
71
+ * :ellipse
72
+ * cols
73
+ * Number of columns in the structuring element.
74
+ * rows
75
+ * Number of rows in the structuring element.
76
+ * anchor_x
77
+ * Relative horizontal offset of the anchor point.
78
+ * anchor_y
79
+ * Relative vertical offset of the anchor point.
80
+ *
81
+ */
82
+ VALUE
83
+ rb_initialize(int argc, VALUE *argv, VALUE self)
84
+ {
85
+ VALUE shape, rows, cols, anchor_x, anchor_y;
86
+ rb_scan_args(argc, argv, "50", &shape, &rows, &cols, &anchor_x, &anchor_y);
87
+ Check_Type(shape, T_SYMBOL);
88
+ const char *shape_name = rb_id2name(SYM2ID(shape));
89
+ int shape_type = 0;
90
+ if (!strcmp(shape_name, "rect"))
91
+ shape_type = CV_SHAPE_RECT;
92
+ else if (!strcmp(shape_name, "corss"))
93
+ shape_type = CV_SHAPE_CROSS;
94
+ else if (!strcmp(shape_name, "ellipse"))
95
+ shape_type = CV_SHAPE_ELLIPSE;
96
+ else
97
+ rb_raise(rb_eTypeError, "argument 1 (shape) should be :rect or :cross or :ellipse.");
98
+ DATA_PTR(self) = cvCreateStructuringElementEx(NUM2INT(cols), NUM2INT(rows), NUM2INT(anchor_x), NUM2INT(anchor_y), shape_type);
99
+ return self;
100
+ }
101
+
102
+ /*
103
+ * call-seq:
104
+ * size -> cvsize
105
+ *
106
+ * Return the structuring element's size.
107
+ */
108
+ VALUE
109
+ rb_size(VALUE self)
110
+ {
111
+ IplConvKernel *kernel = IPLCONVKERNEL(self);
112
+ return cCvSize::new_object(cvSize(kernel->nCols, kernel->nRows));
113
+ }
114
+
115
+ /*
116
+ * call-seq:
117
+ * cols -> int
118
+ *
119
+ * Return number of columns in the structuring element.
120
+ */
121
+ VALUE
122
+ rb_cols(VALUE self)
123
+ {
124
+ return INT2NUM(IPLCONVKERNEL(self)->nCols);
125
+ }
126
+
127
+ /*
128
+ * call-seq:
129
+ * rows -> int
130
+ *
131
+ * Return number of rows in the structuring element.
132
+ */
133
+ VALUE
134
+ rb_rows(VALUE self)
135
+ {
136
+ return INT2NUM(IPLCONVKERNEL(self)->nRows);
137
+ }
138
+
139
+ /*
140
+ * call-seq:
141
+ * anchor -> cvpoint
142
+ *
143
+ * Return anchor of the structuring element.
144
+ */
145
+ VALUE
146
+ rb_anchor(VALUE self)
147
+ {
148
+ IplConvKernel *kernel = IPLCONVKERNEL(self);
149
+ return cCvPoint::new_object(cvPoint(kernel->anchorX, kernel->anchorY));
150
+ }
151
+
152
+ /*
153
+ * call-seq:
154
+ * anchor_x -> int
155
+ *
156
+ * Return relative horizontal offset of the anchor point.
157
+ */
158
+ VALUE
159
+ rb_anchor_x(VALUE self)
160
+ {
161
+ return INT2NUM(IPLCONVKERNEL(self)->anchorX);
162
+ }
163
+
164
+ /*
165
+ * call-seq:
166
+ * anchor_y -> int
167
+ *
168
+ * Return relative vertical offset of the anchor point.
169
+ */
170
+ VALUE
171
+ rb_anchor_y(VALUE self)
172
+ {
173
+ return INT2NUM(IPLCONVKERNEL(self)->anchorY);
174
+ }
175
+
176
+ __NAMESPACE_END_IPLCONVKERNEL
177
+ __NAMESPACE_END_OPENCV