opencv 0.0.6 → 0.0.7
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +0 -0
- data/License.txt +0 -0
- data/Manifest.txt +0 -0
- data/README.txt +0 -0
- data/Rakefile +1 -1
- data/examples/convexhull.rb +0 -0
- data/examples/face_detect.rb +0 -0
- data/examples/houghcircle.rb +0 -0
- data/examples/inpaint.png +0 -0
- data/examples/inpaint.rb +0 -0
- data/examples/paint.rb +0 -0
- data/examples/snake.rb +0 -0
- data/examples/stuff.jpg +0 -0
- data/ext/curve.cpp +0 -0
- data/ext/curve.h +0 -0
- data/ext/cvavgcomp.cpp +0 -0
- data/ext/cvavgcomp.h +0 -0
- data/ext/cvbox2d.cpp +0 -0
- data/ext/cvbox2d.h +0 -0
- data/ext/cvcapture.cpp +0 -0
- data/ext/cvcapture.h +0 -0
- data/ext/cvchain.cpp +3 -6
- data/ext/cvchain.h +0 -0
- data/ext/cvchaincode.cpp +0 -0
- data/ext/cvchaincode.h +0 -0
- data/ext/cvcircle32f.cpp +0 -0
- data/ext/cvcircle32f.h +0 -0
- data/ext/cvcondensation.cpp +0 -0
- data/ext/cvcondensation.h +0 -0
- data/ext/cvconnectedcomp.cpp +0 -0
- data/ext/cvconnectedcomp.h +0 -0
- data/ext/cvcontour.cpp +0 -0
- data/ext/cvcontour.h +0 -0
- data/ext/cvcontourtree.cpp +0 -0
- data/ext/cvcontourtree.h +0 -0
- data/ext/cvconvexitydefect.cpp +0 -0
- data/ext/cvconvexitydefect.h +0 -0
- data/ext/cverror.cpp +0 -0
- data/ext/cverror.h +0 -0
- data/ext/cvfont.cpp +0 -0
- data/ext/cvfont.h +0 -0
- data/ext/cvhaarclassifiercascade.cpp +1 -1
- data/ext/cvhaarclassifiercascade.h +0 -0
- data/ext/cvhistogram.cpp +27 -2
- data/ext/cvhistogram.h +3 -0
- data/ext/cvindex.cpp +0 -0
- data/ext/cvindex.h +0 -0
- data/ext/cvline.cpp +0 -0
- data/ext/cvline.h +0 -0
- data/ext/cvmat.cpp +74 -47
- data/ext/cvmat.h +1 -1
- data/ext/cvmatnd.cpp +0 -0
- data/ext/cvmatnd.h +0 -0
- data/ext/cvmemstorage.cpp +0 -0
- data/ext/cvmemstorage.h +0 -0
- data/ext/cvmoments.cpp +0 -0
- data/ext/cvmoments.h +0 -0
- data/ext/cvpoint.cpp +0 -0
- data/ext/cvpoint.h +0 -0
- data/ext/cvpoint2d32f.cpp +0 -0
- data/ext/cvpoint2d32f.h +0 -0
- data/ext/cvpoint3d32f.cpp +0 -0
- data/ext/cvpoint3d32f.h +0 -0
- data/ext/cvrect.cpp +0 -0
- data/ext/cvrect.h +0 -0
- data/ext/cvscalar.cpp +0 -0
- data/ext/cvscalar.h +0 -0
- data/ext/cvseq.cpp +4 -4
- data/ext/cvseq.h +0 -0
- data/ext/cvset.cpp +0 -0
- data/ext/cvset.h +0 -0
- data/ext/cvsize.cpp +0 -0
- data/ext/cvsize.h +0 -0
- data/ext/cvsize2d32f.cpp +0 -0
- data/ext/cvsize2d32f.h +0 -0
- data/ext/cvslice.cpp +0 -0
- data/ext/cvslice.h +0 -0
- data/ext/cvsparsemat.cpp +0 -0
- data/ext/cvsparsemat.h +0 -0
- data/ext/cvtermcriteria.cpp +0 -0
- data/ext/cvtermcriteria.h +2 -2
- data/ext/cvtwopoints.cpp +0 -0
- data/ext/cvtwopoints.h +0 -0
- data/ext/cvvector.cpp +0 -0
- data/ext/cvvector.h +0 -0
- data/ext/cvvideowriter.cpp +4 -4
- data/ext/cvvideowriter.h +0 -0
- data/ext/extconf.rb +0 -0
- data/ext/gui.cpp +0 -0
- data/ext/gui.h +0 -0
- data/ext/iplconvkernel.cpp +0 -0
- data/ext/iplconvkernel.h +0 -0
- data/ext/iplimage.cpp +0 -0
- data/ext/iplimage.h +0 -0
- data/ext/mouseevent.cpp +1 -1
- data/ext/mouseevent.h +0 -0
- data/ext/opencv.cpp +3 -0
- data/ext/opencv.h +9 -4
- data/ext/point3dset.cpp +0 -0
- data/ext/point3dset.h +0 -0
- data/ext/pointset.cpp +8 -8
- data/ext/pointset.h +0 -0
- data/ext/trackbar.cpp +1 -1
- data/ext/trackbar.h +0 -0
- data/ext/window.cpp +35 -16
- data/ext/window.h +2 -1
- 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 +0 -0
- data/lib/version.rb +1 -1
- data/setup/setup.cygwin.rb +0 -0
- data/setup/setup.mingw.rb +0 -0
- data/setup/setup.mswin32.rb +0 -0
- data/test/test_opencv.rb +0 -0
- metadata +5 -13
data/History.txt
CHANGED
File without changes
|
data/License.txt
CHANGED
File without changes
|
data/Manifest.txt
CHANGED
File without changes
|
data/README.txt
CHANGED
File without changes
|
data/Rakefile
CHANGED
data/examples/convexhull.rb
CHANGED
File without changes
|
data/examples/face_detect.rb
CHANGED
File without changes
|
data/examples/houghcircle.rb
CHANGED
File without changes
|
data/examples/inpaint.png
CHANGED
File without changes
|
data/examples/inpaint.rb
CHANGED
File without changes
|
data/examples/paint.rb
CHANGED
File without changes
|
data/examples/snake.rb
CHANGED
File without changes
|
data/examples/stuff.jpg
CHANGED
File without changes
|
data/ext/curve.cpp
CHANGED
File without changes
|
data/ext/curve.h
CHANGED
File without changes
|
data/ext/cvavgcomp.cpp
CHANGED
File without changes
|
data/ext/cvavgcomp.h
CHANGED
File without changes
|
data/ext/cvbox2d.cpp
CHANGED
File without changes
|
data/ext/cvbox2d.h
CHANGED
File without changes
|
data/ext/cvcapture.cpp
CHANGED
File without changes
|
data/ext/cvcapture.h
CHANGED
File without changes
|
data/ext/cvchain.cpp
CHANGED
@@ -21,7 +21,8 @@ __NAMESPACE_BEGIN_CVCHAIN
|
|
21
21
|
#define APPROX_CHAIN_METHOD(op) CVMETHOD("APPROX_CHAIN_METHOD", rb_hash_aref(op, ID2SYM(rb_intern("method"))), CV_CHAIN_APPROX_SIMPLE)
|
22
22
|
#define APPROX_CHAIN_PARAMETER(op) NUM2INT(rb_hash_aref(op, ID2SYM(rb_intern("parameter"))))
|
23
23
|
#define APPROX_CHAIN_MINIMAL_PARAMETER(op) NUM2INT(rb_hash_aref(op, ID2SYM(rb_intern("minimal_parameter"))))
|
24
|
-
#define APPROX_CHAIN_RECURSIVE(op) (
|
24
|
+
#define APPROX_CHAIN_RECURSIVE(op) RTEST(rb_hash_aref(op, ID2SYM(rb_intern("recursive")))) ? 0 : 1
|
25
|
+
//#define APPROX_CHAIN_RECURSIVE(op) ({VALUE _recursive = rb_hash_aref(op, ID2SYM(rb_intern("recursive"))); NIL_P(_recursive) ? 0 : _recursive == Qfalse ? 0 : 1;})
|
25
26
|
|
26
27
|
VALUE rb_klass;
|
27
28
|
|
@@ -158,17 +159,13 @@ rb_approx_chain(int argc, VALUE *argv, VALUE self)
|
|
158
159
|
VALUE approx_chain_option, storage;
|
159
160
|
rb_scan_args(argc, argv, "01", &approx_chain_option);
|
160
161
|
approx_chain_option = APPROX_CHAIN_OPTION(approx_chain_option);
|
161
|
-
/* can't compile VC
|
162
162
|
storage = cCvMemStorage::new_object();
|
163
163
|
CvSeq *seq = cvApproxChains(CVSEQ(self), CVMEMSTORAGE(storage),
|
164
164
|
APPROX_CHAIN_METHOD(approx_chain_option),
|
165
165
|
APPROX_CHAIN_PARAMETER(approx_chain_option),
|
166
166
|
APPROX_CHAIN_MINIMAL_PARAMETER(approx_chain_option),
|
167
|
-
APPROX_CHAIN_RECURSIVE(approx_chain_option));
|
168
|
-
|
167
|
+
APPROX_CHAIN_RECURSIVE(approx_chain_option));
|
169
168
|
return cCvSeq::new_sequence(cCvContour::rb_class(), seq, cCvPoint::rb_class(), storage);
|
170
|
-
*/
|
171
|
-
return Qnil;
|
172
169
|
}
|
173
170
|
|
174
171
|
VALUE
|
data/ext/cvchain.h
CHANGED
File without changes
|
data/ext/cvchaincode.cpp
CHANGED
File without changes
|
data/ext/cvchaincode.h
CHANGED
File without changes
|
data/ext/cvcircle32f.cpp
CHANGED
File without changes
|
data/ext/cvcircle32f.h
CHANGED
File without changes
|
data/ext/cvcondensation.cpp
CHANGED
File without changes
|
data/ext/cvcondensation.h
CHANGED
File without changes
|
data/ext/cvconnectedcomp.cpp
CHANGED
File without changes
|
data/ext/cvconnectedcomp.h
CHANGED
File without changes
|
data/ext/cvcontour.cpp
CHANGED
File without changes
|
data/ext/cvcontour.h
CHANGED
File without changes
|
data/ext/cvcontourtree.cpp
CHANGED
File without changes
|
data/ext/cvcontourtree.h
CHANGED
File without changes
|
data/ext/cvconvexitydefect.cpp
CHANGED
File without changes
|
data/ext/cvconvexitydefect.h
CHANGED
File without changes
|
data/ext/cverror.cpp
CHANGED
File without changes
|
data/ext/cverror.h
CHANGED
File without changes
|
data/ext/cvfont.cpp
CHANGED
File without changes
|
data/ext/cvfont.h
CHANGED
File without changes
|
File without changes
|
data/ext/cvhistogram.cpp
CHANGED
@@ -38,10 +38,16 @@ define_ruby_class()
|
|
38
38
|
|
39
39
|
rb_klass = rb_define_class_under(opencv, "CvHistogram", rb_cObject);
|
40
40
|
|
41
|
+
//rb_define_private_method(rb_klass, "initialize", RUBY_METHOD_FUNC(rb_initialize), -1);
|
42
|
+
|
41
43
|
rb_define_method(rb_klass, "is_uniform?", RUBY_METHOD_FUNC(rb_is_uniform), 0);
|
42
44
|
rb_define_method(rb_klass, "is_sparse?", RUBY_METHOD_FUNC(rb_is_sparse), 0);
|
43
45
|
rb_define_method(rb_klass, "has_range?", RUBY_METHOD_FUNC(rb_has_range), 0);
|
44
46
|
rb_define_method(rb_klass, "dims", RUBY_METHOD_FUNC(rb_dims), 0);
|
47
|
+
|
48
|
+
rb_define_method(rb_klass, "copy", RUBY_METHOD_FUNC(rb_copy), 0);
|
49
|
+
rb_define_method(rb_klass, "clear", RUBY_METHOD_FUNC(rb_clear), 0);
|
50
|
+
rb_define_method(rb_klass, "clear!", RUBY_METHOD_FUNC(rb_clear_bang), 0);
|
45
51
|
|
46
52
|
rb_define_method(rb_klass, "normalize", RUBY_METHOD_FUNC(rb_normalize), 1);
|
47
53
|
rb_define_method(rb_klass, "normalize!", RUBY_METHOD_FUNC(rb_normalize_bang), 1);
|
@@ -54,9 +60,15 @@ define_ruby_class()
|
|
54
60
|
VALUE
|
55
61
|
rb_allocate(VALUE klass)
|
56
62
|
{
|
57
|
-
//
|
58
|
-
|
63
|
+
//return OPENCV_OBJECT(klass, 0);
|
64
|
+
}
|
65
|
+
|
66
|
+
/*
|
67
|
+
VALUE
|
68
|
+
rb_initialize(int argc, VALUE argv, VALUE self)
|
69
|
+
{
|
59
70
|
}
|
71
|
+
*/
|
60
72
|
|
61
73
|
/*
|
62
74
|
* call-seq:
|
@@ -132,6 +144,19 @@ rb_copy(VALUE self)
|
|
132
144
|
return dest;
|
133
145
|
}
|
134
146
|
|
147
|
+
/*
|
148
|
+
* call-seq:
|
149
|
+
* clear
|
150
|
+
*
|
151
|
+
* Return histogram that sets all histogram bins to 0 in case of dense histogram and removes all histogram bins in case of sparse array.
|
152
|
+
*/
|
153
|
+
VALUE
|
154
|
+
rb_clear(VALUE self)
|
155
|
+
{
|
156
|
+
cvClearHist(CVHISTOGRAM(rb_copy(self)));
|
157
|
+
return self;
|
158
|
+
}
|
159
|
+
|
135
160
|
/*
|
136
161
|
* call-seq:
|
137
162
|
* clear!
|
data/ext/cvhistogram.h
CHANGED
@@ -22,12 +22,15 @@ VALUE rb_class();
|
|
22
22
|
|
23
23
|
void define_ruby_class();
|
24
24
|
|
25
|
+
VALUE rb_initialize(int argc, VALUE *argv, VALUE self);
|
26
|
+
|
25
27
|
VALUE rb_is_uniform(VALUE self);
|
26
28
|
VALUE rb_is_sparse(VALUE self);
|
27
29
|
VALUE rb_has_range(VALUE self);
|
28
30
|
VALUE rb_dims(VALUE self);
|
29
31
|
VALUE rb_bins(VALUE self);
|
30
32
|
|
33
|
+
VALUE rb_copy(VALUE self);
|
31
34
|
VALUE rb_clear(VALUE self);
|
32
35
|
VALUE rb_clear_bang(VALUE self);
|
33
36
|
|
data/ext/cvindex.cpp
CHANGED
File without changes
|
data/ext/cvindex.h
CHANGED
File without changes
|
data/ext/cvline.cpp
CHANGED
File without changes
|
data/ext/cvline.h
CHANGED
File without changes
|
data/ext/cvmat.cpp
CHANGED
@@ -53,9 +53,10 @@ __NAMESPACE_BEGIN_CVMAT
|
|
53
53
|
#define DRAWING_OPTION(op) NIL_P(op) ? rb_const_get(rb_class(), rb_intern("DRAWING_OPTION")) : rb_funcall(rb_const_get(rb_class(), rb_intern("DRAWING_OPTION")), rb_intern("merge"), 1, op)
|
54
54
|
#define DO_COLOR(op) VALUE_TO_CVSCALAR(rb_hash_aref(op, ID2SYM(rb_intern("color"))))
|
55
55
|
#define DO_THICKNESS(op) FIX2INT(rb_hash_aref(op, ID2SYM(rb_intern("thickness"))))
|
56
|
-
#define DO_LINE_TYPE(op) FIX2INT(rb_hash_aref(op, ID2SYM(rb_intern("line_type")))
|
56
|
+
#define DO_LINE_TYPE(op) FIX2INT(rb_equal(rb_hash_aref(op, ID2SYM(rb_intern("line_type"))), ID2SYM(rb_intern("aa"))) ? INT2FIX(CV_AA) : rb_hash_aref(op, ID2SYM(rb_intern("line_type"))))
|
57
57
|
#define DO_SHIFT(op) FIX2INT(rb_hash_aref(op, ID2SYM(rb_intern("shift"))))
|
58
|
-
#define DO_IS_CLOSED(op) (
|
58
|
+
#define DO_IS_CLOSED(op) RTEST(rb_hash_aref(op, ID2SYM(rb_intern("is_closed")))) ? 0 : 1
|
59
|
+
//#define DO_IS_CLOSED(op) ({VALUE _is_closed = rb_hash_aref(op, ID2SYM(rb_intern("is_closed"))); RTEST(_is_closed) ? 0 : 1;})
|
59
60
|
|
60
61
|
#define GOOD_FEATURES_TO_TRACK_OPTION(op) NIL_P(op) ? rb_const_get(rb_class(), rb_intern("GOOD_FEATURES_TO_TRACK_OPTION")) : rb_funcall(rb_const_get(rb_class(), rb_intern("GOOD_FEATURES_TO_TRACK_OPTION")), rb_intern("merge"), 1, op)
|
61
62
|
#define GF_MAX(op) FIX2INT(rb_hash_aref(op, ID2SYM(rb_intern("max"))))
|
@@ -153,8 +154,8 @@ void define_ruby_class()
|
|
153
154
|
rb_hash_aset(find_fundamental_matrix_option, ID2SYM(rb_intern("with_status")), Qfalse);
|
154
155
|
rb_hash_aset(find_fundamental_matrix_option, ID2SYM(rb_intern("maximum_distance")), rb_float_new(1.0));
|
155
156
|
rb_hash_aset(find_fundamental_matrix_option, ID2SYM(rb_intern("desirable_level")), rb_float_new(0.99));
|
156
|
-
|
157
|
-
|
157
|
+
|
158
|
+
rb_define_private_method(rb_klass, "initialize", RUBY_METHOD_FUNC(rb_initialize), -1);
|
158
159
|
// Ruby/OpenCV original functions
|
159
160
|
rb_define_method(rb_klass, "method_missing", RUBY_METHOD_FUNC(rb_method_missing), -1);
|
160
161
|
rb_define_method(rb_klass, "to_s", RUBY_METHOD_FUNC(rb_to_s), 0);
|
@@ -328,7 +329,7 @@ void define_ruby_class()
|
|
328
329
|
//rb_define_method(rb_klass, "get_perspective_transform", RUBY_METHOD_FUNC(rb_get_perspective_transform), -1);
|
329
330
|
//rb_define_alias(rb_klass, "warp_perspective_q_matrix", "get_perspective_transform");
|
330
331
|
rb_define_method(rb_klass, "remap", RUBY_METHOD_FUNC(rb_remap), -1);
|
331
|
-
|
332
|
+
rb_define_method(rb_klass, "log_polar", RUBY_METHOD_FUNC(rb_log_polar), -1);
|
332
333
|
|
333
334
|
rb_define_method(rb_klass, "erode", RUBY_METHOD_FUNC(rb_erode), -1);
|
334
335
|
rb_define_method(rb_klass, "erode!", RUBY_METHOD_FUNC(rb_erode_bang), -1);
|
@@ -452,7 +453,7 @@ rb_method_missing(int argc, VALUE *argv, VALUE self)
|
|
452
453
|
VALUE name, args, method;
|
453
454
|
rb_scan_args(argc, argv, "1*", &name, &args);
|
454
455
|
method = rb_funcall(name, rb_intern("to_s"), 0);
|
455
|
-
if (
|
456
|
+
if (RARRAY_LEN(args) != 0 || !rb_respond_to(rb_module_opencv(), rb_intern(StringValuePtr(method))))
|
456
457
|
return rb_call_super(argc, argv);
|
457
458
|
return rb_funcall(rb_module_opencv(), rb_intern(StringValuePtr(method)), 1, self);
|
458
459
|
}
|
@@ -699,7 +700,7 @@ rb_copy(int argc, VALUE *argv, VALUE self)
|
|
699
700
|
return Qnil;
|
700
701
|
}
|
701
702
|
}else
|
702
|
-
rb_raise(rb_eArgError, "");
|
703
|
+
rb_raise(rb_eArgError, "invalid argument. give %s or Fixnum.", rb_class2name(rb_klass));
|
703
704
|
}
|
704
705
|
}
|
705
706
|
|
@@ -886,26 +887,26 @@ rb_sub_rect(VALUE self, VALUE args)
|
|
886
887
|
CvRect area;
|
887
888
|
CvPoint topleft;
|
888
889
|
CvSize size;
|
889
|
-
switch(
|
890
|
+
switch(RARRAY_LEN(args)) {
|
890
891
|
case 1:
|
891
|
-
area = VALUE_TO_CVRECT(
|
892
|
+
area = VALUE_TO_CVRECT(RARRAY_PTR(args)[0]);
|
892
893
|
break;
|
893
894
|
case 2:
|
894
|
-
topleft = VALUE_TO_CVPOINT(
|
895
|
-
size = VALUE_TO_CVSIZE(
|
895
|
+
topleft = VALUE_TO_CVPOINT(RARRAY_PTR(args)[0]);
|
896
|
+
size = VALUE_TO_CVSIZE(RARRAY_PTR(args)[1]);
|
896
897
|
area.x = topleft.x;
|
897
898
|
area.y = topleft.y;
|
898
899
|
area.width = size.width;
|
899
900
|
area.height = size.height;
|
900
901
|
break;
|
901
902
|
case 4:
|
902
|
-
area.x = NUM2INT(
|
903
|
-
area.y = NUM2INT(
|
904
|
-
area.width = NUM2INT(
|
905
|
-
area.height = NUM2INT(
|
903
|
+
area.x = NUM2INT(RARRAY_PTR(args)[0]);
|
904
|
+
area.y = NUM2INT(RARRAY_PTR(args)[1]);
|
905
|
+
area.width = NUM2INT(RARRAY_PTR(args)[2]);
|
906
|
+
area.height = NUM2INT(RARRAY_PTR(args)[3]);
|
906
907
|
break;
|
907
908
|
default:
|
908
|
-
rb_raise(rb_eArgError, "wrong number of arguments (%
|
909
|
+
rb_raise(rb_eArgError, "wrong number of arguments (%ld of 1 or 2 or 4)", RARRAY_LEN(args));
|
909
910
|
}
|
910
911
|
return DEPEND_OBJECT(rb_klass,
|
911
912
|
cvGetSubRect(CVARR(self), CVALLOC(CvMat), area),
|
@@ -978,7 +979,7 @@ rb_slice_height(VALUE self, VALUE num)
|
|
978
979
|
VALUE
|
979
980
|
rb_row(VALUE self, VALUE args)
|
980
981
|
{
|
981
|
-
int len =
|
982
|
+
int len = RARRAY_LEN(args);
|
982
983
|
if (len < 1) {rb_raise(rb_eArgError, "wrong number of argument.(more than 1)");}
|
983
984
|
VALUE ary = rb_ary_new2(len);
|
984
985
|
for (int i = 0; i < len; i++) {
|
@@ -990,7 +991,7 @@ rb_row(VALUE self, VALUE args)
|
|
990
991
|
rb_ary_store(ary, i, DEPEND_OBJECT(rb_klass, cvGetRows(CVARR(self), CVALLOC(CvMat), slice.start_index, slice.end_index), self));
|
991
992
|
}
|
992
993
|
}
|
993
|
-
return
|
994
|
+
return RARRAY_LEN(ary) > 1 ? ary : rb_ary_entry(ary, 0);
|
994
995
|
}
|
995
996
|
|
996
997
|
/*
|
@@ -1004,7 +1005,7 @@ rb_row(VALUE self, VALUE args)
|
|
1004
1005
|
VALUE
|
1005
1006
|
rb_col(VALUE self, VALUE args)
|
1006
1007
|
{
|
1007
|
-
int len =
|
1008
|
+
int len = RARRAY_LEN(args);
|
1008
1009
|
if (len < 1) {rb_raise(rb_eArgError, "wrong number of argument.(more than 1)");}
|
1009
1010
|
VALUE ary = rb_ary_new2(len);
|
1010
1011
|
for (int i = 0; i < len; i++) {
|
@@ -1016,7 +1017,7 @@ rb_col(VALUE self, VALUE args)
|
|
1016
1017
|
rb_ary_store(ary, i, DEPEND_OBJECT(rb_klass, cvGetCols(CVARR(self), CVALLOC(CvMat), slice.start_index, slice.end_index), self));
|
1017
1018
|
}
|
1018
1019
|
}
|
1019
|
-
return
|
1020
|
+
return RARRAY_LEN(ary) > 1 ? ary : rb_ary_entry(ary, 0);
|
1020
1021
|
}
|
1021
1022
|
|
1022
1023
|
/*
|
@@ -1134,11 +1135,11 @@ VALUE
|
|
1134
1135
|
rb_aref(VALUE self, VALUE args)
|
1135
1136
|
{
|
1136
1137
|
int index[CV_MAX_DIM];
|
1137
|
-
for (int i = 0; i <
|
1138
|
+
for (int i = 0; i < RARRAY_LEN(args); i++) {
|
1138
1139
|
index[i] = NUM2INT(rb_ary_entry(args, i));
|
1139
1140
|
}
|
1140
1141
|
CvScalar scalar = cvScalarAll(0);
|
1141
|
-
switch(
|
1142
|
+
switch(RARRAY_LEN(args)) {
|
1142
1143
|
case 1:
|
1143
1144
|
scalar = cvGet1D(CVARR(self), index[0]);
|
1144
1145
|
break;
|
@@ -1166,10 +1167,10 @@ rb_aset(VALUE self, VALUE args)
|
|
1166
1167
|
{
|
1167
1168
|
CvScalar scalar = VALUE_TO_CVSCALAR(rb_ary_pop(args));
|
1168
1169
|
int index[CV_MAX_DIM];
|
1169
|
-
for (int i = 0; i <
|
1170
|
+
for (int i = 0; i < RARRAY_LEN(args); i++) {
|
1170
1171
|
index[i] = NUM2INT(rb_ary_entry(args, i));
|
1171
1172
|
}
|
1172
|
-
switch(
|
1173
|
+
switch(RARRAY_LEN(args)) {
|
1173
1174
|
case 1:
|
1174
1175
|
cvSet1D(CVARR(self), index[0], scalar);
|
1175
1176
|
break;
|
@@ -1466,7 +1467,7 @@ VALUE
|
|
1466
1467
|
rb_merge(VALUE klass, VALUE args)
|
1467
1468
|
{
|
1468
1469
|
VALUE object, dest;
|
1469
|
-
int len =
|
1470
|
+
int len = RARRAY_LEN(args);
|
1470
1471
|
if (!(len > 0) || len > CV_CN_MAX) {
|
1471
1472
|
rb_raise(rb_eArgError, "wrong number of argument (%d for 1..4)", len);
|
1472
1473
|
}
|
@@ -1914,7 +1915,7 @@ rb_ne(VALUE self, VALUE val)
|
|
1914
1915
|
VALUE
|
1915
1916
|
rb_in_range(VALUE self, VALUE min, VALUE max)
|
1916
1917
|
{
|
1917
|
-
VALUE dest =
|
1918
|
+
VALUE dest = new_object(cvGetSize(CVARR(self)), CV_8UC1), tmp;
|
1918
1919
|
if (rb_obj_is_kind_of(min, rb_klass) && rb_obj_is_kind_of(max, rb_klass)) {
|
1919
1920
|
cvInRange(CVARR(self), CVARR(min), CVARR(max), CVARR(dest));
|
1920
1921
|
}else if (rb_obj_is_kind_of(min, rb_klass)) {
|
@@ -1988,7 +1989,7 @@ rb_sum(VALUE self)
|
|
1988
1989
|
VALUE
|
1989
1990
|
rb_avg(int argc, VALUE *argv, VALUE self)
|
1990
1991
|
{
|
1991
|
-
VALUE mask
|
1992
|
+
VALUE mask;
|
1992
1993
|
rb_scan_args(argc, argv, "01", &mask);
|
1993
1994
|
|
1994
1995
|
return cCvScalar::new_object(cvAvg(CVARR(self), MASK(mask)));
|
@@ -2282,7 +2283,7 @@ rb_solve(int argc, VALUE *argv, VALUE self)
|
|
2282
2283
|
VALUE
|
2283
2284
|
rb_svd(int argc, VALUE *argv, VALUE self)
|
2284
2285
|
{
|
2285
|
-
rb_raise(rb_eNotImpError, "");
|
2286
|
+
rb_raise(rb_eNotImpError, "not yet");
|
2286
2287
|
/*
|
2287
2288
|
VALUE u = Qnil, v = Qnil;
|
2288
2289
|
rb_scan_args(argc, argv, "02", &u, &v);
|
@@ -2303,7 +2304,7 @@ rb_svd(int argc, VALUE *argv, VALUE self)
|
|
2303
2304
|
VALUE
|
2304
2305
|
rb_svbksb(int argc, VALUE *argv, VALUE self)
|
2305
2306
|
{
|
2306
|
-
rb_raise(rb_eNotImpError, "");
|
2307
|
+
rb_raise(rb_eNotImpError, "not yet");
|
2307
2308
|
}
|
2308
2309
|
|
2309
2310
|
/*
|
@@ -2358,7 +2359,7 @@ rb_eigenvv_bang(int argc, VALUE *argv, VALUE self)
|
|
2358
2359
|
VALUE
|
2359
2360
|
rb_calc_covar_matrix(int argc, VALUE *argv, VALUE self)
|
2360
2361
|
{
|
2361
|
-
rb_raise(rb_eNotImpError, "");
|
2362
|
+
rb_raise(rb_eNotImpError, "not yet.");
|
2362
2363
|
}
|
2363
2364
|
|
2364
2365
|
/*
|
@@ -2370,7 +2371,7 @@ rb_calc_covar_matrix(int argc, VALUE *argv, VALUE self)
|
|
2370
2371
|
VALUE
|
2371
2372
|
rb_mahalonobis(int argc, VALUE *argv, VALUE self)
|
2372
2373
|
{
|
2373
|
-
rb_raise(rb_eNotImpError, "");
|
2374
|
+
rb_raise(rb_eNotImpError, "not yet.");
|
2374
2375
|
}
|
2375
2376
|
|
2376
2377
|
|
@@ -2732,7 +2733,7 @@ rb_fill_poly_bang(int argc, VALUE *argv, VALUE self)
|
|
2732
2733
|
rb_scan_args(argc, argv, "11", &points, &drawing_option);
|
2733
2734
|
drawing_option = DRAWING_OPTION(drawing_option);
|
2734
2735
|
if (!POINT_SET_P(points))
|
2735
|
-
rb_raise(rb_eTypeError, "argument 1(points) should be %s.", cCvSeq::rb_class());
|
2736
|
+
rb_raise(rb_eTypeError, "argument 1(points) should be %s.", rb_class2name(cCvSeq::rb_class()));
|
2736
2737
|
/* // todo : draw multi-sequence polygon
|
2737
2738
|
CvSeq *seq = CVSEQ(points);
|
2738
2739
|
int contours = 1;
|
@@ -2802,7 +2803,7 @@ rb_fill_convex_poly_bang(int argc, VALUE *argv, VALUE self)
|
|
2802
2803
|
rb_scan_args(argc, argv, "11", &points, &drawing_option);
|
2803
2804
|
drawing_option = DRAWING_OPTION(drawing_option);
|
2804
2805
|
if (!POINT_SET_P(points))
|
2805
|
-
rb_raise(rb_eTypeError, "argument 1(points) should be %s.", cCvSeq::rb_class());
|
2806
|
+
rb_raise(rb_eTypeError, "argument 1(points) should be %s.", rb_class2name(cCvSeq::rb_class()));
|
2806
2807
|
int np = CVSEQ(points)->total;
|
2807
2808
|
VALUE tmp = cCvMat::new_object(1, np, CV_32SC2);
|
2808
2809
|
CvPoint *p = (CvPoint*)cvCvtSeqToArray(CVSEQ(points), CVMAT(tmp)->data.ptr, CV_WHOLE_SEQ);
|
@@ -3315,23 +3316,50 @@ rb_remap(int argc, VALUE *argv, VALUE self)
|
|
3315
3316
|
|
3316
3317
|
/*
|
3317
3318
|
* call-seq:
|
3318
|
-
* log_polar(<i>center,
|
3319
|
+
* log_polar(<i>size, center, m[, flags...]]</i>)
|
3319
3320
|
*
|
3320
3321
|
* Remaps image to log-polar space.
|
3322
|
+
*
|
3323
|
+
* size
|
3324
|
+
* Destination image size (log-polar space's size)
|
3325
|
+
* center
|
3326
|
+
* The transformation center, where the output precision is maximal.
|
3327
|
+
* m
|
3328
|
+
* Magnitude scale parameter. See below.
|
3329
|
+
* flags
|
3330
|
+
* Interpolation method and option. default is :linear, :fill_outliers
|
3331
|
+
*
|
3332
|
+
* log_polar transforms source image using the following transformation:
|
3333
|
+
*
|
3334
|
+
* Forward transformation (:inverse_map is not set):
|
3335
|
+
* dst(phi,rho)<-src(x,y)
|
3336
|
+
* Inverse transformation (:inverse_map is set):
|
3337
|
+
* dest(x,y)<-src(phi,rho)
|
3338
|
+
* where rho = M*log(sqrt(x^2+y^2))
|
3339
|
+
* phi = atan(y/x)
|
3340
|
+
*
|
3341
|
+
* use log_polar example.
|
3342
|
+
* note: The order of the flag given to the argument is not significant.
|
3343
|
+
* lp1 = mat.log_polar(size, center, m, :linear, :fill_outliers) #=> default
|
3344
|
+
* lp2 = mat.log_polar(size, center, m, :linear, :fill_outliers, :inverse_map)
|
3345
|
+
* lp3 = mat.log_polar(size, center, m, :inverse_map, :linear, :fill_outliers) # same as lp2
|
3346
|
+
* lp4 = mat.log_polar(size, center, m, :cubic) # use other interpolation method
|
3321
3347
|
*/
|
3322
3348
|
VALUE
|
3323
3349
|
rb_log_polar(int argc, VALUE *argv, VALUE self)
|
3324
3350
|
{
|
3325
|
-
|
3326
|
-
|
3327
|
-
|
3328
|
-
|
3351
|
+
VALUE size, center, m, args, dest; //interpolation, warp, dest;
|
3352
|
+
rb_scan_args(argc, argv, "3*", &size, ¢er, &m, &args);
|
3353
|
+
dest = cCvMat::new_object(VALUE_TO_CVSIZE(size), cvGetElemType(CVARR(self)));
|
3354
|
+
int flags = 0;
|
3355
|
+
if(!RARRAY_LEN(args))
|
3356
|
+
for(int i = 0; i < RARRAY_LEN(args); i++)
|
3357
|
+
flags = flags | CVMETHOD("LOG_POLAR_METHOD", RARRAY_PTR(args)[i]);
|
3358
|
+
else
|
3359
|
+
flags = CV_INTER_LINEAR | CV_WARP_FILL_OUTLIERS;
|
3329
3360
|
cvLogPolar(CVARR(self), CVARR(dest),
|
3330
|
-
VALUE_TO_CVPOINT2D32F(center), NUM2DBL(m),
|
3331
|
-
CVMETHOD("INTERPOLATION_METHOD", interpolation, CV_INTER_LINEAR) | CVMETHOD("WARP_FLAG", option, CV_WARP_FILL_OUTLIEARS), VALUE_TO_CVSCALAR(fillval));
|
3361
|
+
VALUE_TO_CVPOINT2D32F(center), NUM2DBL(m), flags);
|
3332
3362
|
return dest;
|
3333
|
-
*/
|
3334
|
-
return Qnil;
|
3335
3363
|
}
|
3336
3364
|
|
3337
3365
|
/*
|
@@ -3555,7 +3583,7 @@ rb_smooth_gaussian(int argc, VALUE *argv, VALUE self)
|
|
3555
3583
|
{
|
3556
3584
|
SUPPORT_C1C3_ONLY(self);
|
3557
3585
|
VALUE p1, p2, p3, p4, dest;
|
3558
|
-
rb_scan_args(argc, argv, "04", &p1, &p2, &p3, p4);
|
3586
|
+
rb_scan_args(argc, argv, "04", &p1, &p2, &p3, &p4);
|
3559
3587
|
dest = cCvMat::new_object(cvGetSize(CVARR(self)), cvGetElemType(CVARR(self)));
|
3560
3588
|
cvSmooth(CVARR(self), CVARR(dest), CV_GAUSSIAN, IF_INT(p1, 3), IF_INT(p2, 0), IF_DBL(p3, 0.0), IF_DBL(p4, 0.0));
|
3561
3589
|
return dest;
|
@@ -3615,7 +3643,6 @@ rb_filter2d(int argc, VALUE *argv, VALUE self)
|
|
3615
3643
|
rb_scan_args(argc, argv, "11", &kernel, &anchor);
|
3616
3644
|
if (!rb_obj_is_kind_of(kernel, cCvMat::rb_class()))
|
3617
3645
|
rb_raise(rb_eTypeError, "argument 1 (kernel) should be %s.", rb_class2name(cCvMat::rb_class()));
|
3618
|
-
int type = cvGetElemType(CVARR(kernel));
|
3619
3646
|
dest = cCvMat::new_object(cvGetSize(CVARR(self)), cvGetElemType(CVARR(self)));
|
3620
3647
|
cvFilter2D(CVARR(self), CVARR(dest), CVMAT(kernel), NIL_P(anchor) ? cvPoint(-1,-1) : VALUE_TO_CVPOINT(anchor));
|
3621
3648
|
return dest;
|
@@ -4338,11 +4365,11 @@ rb_match_template(int argc, VALUE *argv, VALUE self)
|
|
4338
4365
|
rb_raise(rb_eTypeError, "argument 1 (template) should be %s.", rb_class2name(cCvMat::rb_class()));
|
4339
4366
|
if (cvGetElemType(CVARR(self)) != cvGetElemType(CVARR(templ)))
|
4340
4367
|
rb_raise(rb_eTypeError, "template should be same type of self.");
|
4341
|
-
CvSize src_size = cvGetSize(CVARR(self)), template_size = cvGetSize(CVARR(
|
4368
|
+
CvSize src_size = cvGetSize(CVARR(self)), template_size = cvGetSize(CVARR(templ));
|
4342
4369
|
result = cCvMat::new_object(cvSize(src_size.width - template_size.width + 1,
|
4343
4370
|
src_size.height - template_size.height + 1),
|
4344
4371
|
CV_32FC1);
|
4345
|
-
cvMatchTemplate(CVARR(self), CVARR(templ), CVARR(result), CVMETHOD("MATCH_TEMPLATE_METHOD", CV_TM_SQDIFF));
|
4372
|
+
cvMatchTemplate(CVARR(self), CVARR(templ), CVARR(result), CVMETHOD("MATCH_TEMPLATE_METHOD", method, CV_TM_SQDIFF));
|
4346
4373
|
return result;
|
4347
4374
|
}
|
4348
4375
|
|
@@ -4488,7 +4515,7 @@ rb_snake_image(int argc, VALUE *argv, VALUE self)
|
|
4488
4515
|
c = ALLOC(float);
|
4489
4516
|
c[0] = (float)NUM2DBL(gamma);
|
4490
4517
|
}else{ // CV_ARRAY
|
4491
|
-
rb_raise(rb_eNotImpError, "");
|
4518
|
+
rb_raise(rb_eNotImpError, "not yet.");
|
4492
4519
|
// todo
|
4493
4520
|
}
|
4494
4521
|
CvSize w = VALUE_TO_CVSIZE(window);
|
data/ext/cvmat.h
CHANGED
@@ -181,7 +181,7 @@ VALUE rb_rotation(VALUE self, VALUE center, VALUE angle, VALUE scale);
|
|
181
181
|
VALUE rb_warp_perspective(int argc, VALUE *argv, VALUE self);
|
182
182
|
//VALUE rb_perspective_transform();
|
183
183
|
VALUE rb_remap(int argc, VALUE *argv, VALUE self);
|
184
|
-
VALUE rb_log_polar(int argc, VALUE *argv);
|
184
|
+
VALUE rb_log_polar(int argc, VALUE *argv, VALUE self);
|
185
185
|
|
186
186
|
VALUE rb_erode(int argc, VALUE *argv, VALUE self);
|
187
187
|
VALUE rb_erode_bang(int argc, VALUE *argv, VALUE self);
|
data/ext/cvmatnd.cpp
CHANGED
File without changes
|
data/ext/cvmatnd.h
CHANGED
File without changes
|
data/ext/cvmemstorage.cpp
CHANGED
File without changes
|
data/ext/cvmemstorage.h
CHANGED
File without changes
|
data/ext/cvmoments.cpp
CHANGED
File without changes
|
data/ext/cvmoments.h
CHANGED
File without changes
|
data/ext/cvpoint.cpp
CHANGED
File without changes
|
data/ext/cvpoint.h
CHANGED
File without changes
|
data/ext/cvpoint2d32f.cpp
CHANGED
File without changes
|
data/ext/cvpoint2d32f.h
CHANGED
File without changes
|
data/ext/cvpoint3d32f.cpp
CHANGED
File without changes
|
data/ext/cvpoint3d32f.h
CHANGED
File without changes
|
data/ext/cvrect.cpp
CHANGED
File without changes
|
data/ext/cvrect.h
CHANGED
File without changes
|
data/ext/cvscalar.cpp
CHANGED
File without changes
|
data/ext/cvscalar.h
CHANGED
File without changes
|
data/ext/cvseq.cpp
CHANGED
@@ -343,8 +343,8 @@ rb_push(VALUE self, VALUE args)
|
|
343
343
|
CvSeq *seq = CVSEQ(self);
|
344
344
|
VALUE klass = seqblock_class(seq), object;
|
345
345
|
void *buffer = 0;
|
346
|
-
for(int i = 0; i <
|
347
|
-
object =
|
346
|
+
for(int i = 0; i < RARRAY_LEN(args); i++){
|
347
|
+
object = RARRAY_PTR(args)[i];
|
348
348
|
if(CLASS_OF(object) == klass){
|
349
349
|
cvSeqPush(seq, DATA_PTR(object));
|
350
350
|
}else if(rb_obj_is_kind_of(object, rb_klass) && CLASS_OF(object) == klass){ // object is CvSeq
|
@@ -403,8 +403,8 @@ rb_unshift(VALUE self, VALUE args)
|
|
403
403
|
CvSeq *seq = CVSEQ(self);
|
404
404
|
VALUE klass = seqblock_class(seq), object;
|
405
405
|
void *buffer = 0;
|
406
|
-
for(int i = 0; i <
|
407
|
-
object =
|
406
|
+
for(int i = 0; i < RARRAY_LEN(args); i++){
|
407
|
+
object = RARRAY_PTR(args)[i];
|
408
408
|
if(CLASS_OF(object) == klass){
|
409
409
|
cvSeqPushFront(seq, DATA_PTR(object));
|
410
410
|
}else if(rb_obj_is_kind_of(object, rb_klass) && CLASS_OF(object) == klass){
|
data/ext/cvseq.h
CHANGED
File without changes
|
data/ext/cvset.cpp
CHANGED
File without changes
|
data/ext/cvset.h
CHANGED
File without changes
|
data/ext/cvsize.cpp
CHANGED
File without changes
|
data/ext/cvsize.h
CHANGED
File without changes
|
data/ext/cvsize2d32f.cpp
CHANGED
File without changes
|
data/ext/cvsize2d32f.h
CHANGED
File without changes
|
data/ext/cvslice.cpp
CHANGED
File without changes
|
data/ext/cvslice.h
CHANGED
File without changes
|
data/ext/cvsparsemat.cpp
CHANGED
File without changes
|
data/ext/cvsparsemat.h
CHANGED
File without changes
|
data/ext/cvtermcriteria.cpp
CHANGED
File without changes
|
data/ext/cvtermcriteria.h
CHANGED
@@ -57,13 +57,13 @@ VALUE_TO_CVTERMCRITERIA(VALUE object)
|
|
57
57
|
case T_FLOAT:
|
58
58
|
return cvTermCriteria(CV_TERMCRIT_EPS, 0, NUM2DBL(object));
|
59
59
|
case T_ARRAY:
|
60
|
-
if (
|
60
|
+
if (RARRAY_LEN(object) == 2) {
|
61
61
|
return cvTermCriteria(CV_TERMCRIT_ITER|CV_TERMCRIT_EPS,
|
62
62
|
NUM2INT(rb_ary_entry(object, 0)),
|
63
63
|
NUM2DBL(rb_ary_entry(object, 1)));
|
64
64
|
}
|
65
65
|
}
|
66
|
-
rb_raise(rb_eTypeError, "");
|
66
|
+
rb_raise(rb_eTypeError, "can't convert CvTermCriteria.");
|
67
67
|
}
|
68
68
|
|
69
69
|
__NAMESPACE_END_OPENCV
|
data/ext/cvtwopoints.cpp
CHANGED
File without changes
|
data/ext/cvtwopoints.h
CHANGED
File without changes
|
data/ext/cvvector.cpp
CHANGED
File without changes
|
data/ext/cvvector.h
CHANGED
File without changes
|
data/ext/cvvideowriter.cpp
CHANGED
@@ -60,17 +60,17 @@ rb_initialize(int argc, VALUE *argv, VALUE self)
|
|
60
60
|
char codec[4] = {' ', ' ', ' ', ' '};
|
61
61
|
int codec_number;
|
62
62
|
Check_Type(filename, T_STRING);
|
63
|
-
if (
|
63
|
+
if (RSTRING_LEN(filename) == 0)
|
64
64
|
rb_raise(rb_eArgError, "argument 1 (file name) dose not given");
|
65
65
|
if (NIL_P(fourcc))
|
66
66
|
codec_number = -1;
|
67
67
|
else {
|
68
68
|
Check_Type(fourcc, T_STRING);
|
69
|
-
if (
|
69
|
+
if (RSTRING_LEN(fourcc) > 4)
|
70
70
|
rb_raise(rb_eStandardError, "argument 2 (fourcc) should be specific 4-character. (i.e \"PIM1\",\"MJPG\")");
|
71
71
|
else {
|
72
|
-
for (int i = 0; i <
|
73
|
-
codec[i] =
|
72
|
+
for (int i = 0; i < RSTRING_LEN(fourcc); i++)
|
73
|
+
codec[i] = RSTRING_PTR(fourcc)[i];
|
74
74
|
codec_number = CV_FOURCC(codec[0], codec[1], codec[2], codec[3]);
|
75
75
|
}
|
76
76
|
}
|
data/ext/cvvideowriter.h
CHANGED
File without changes
|
data/ext/extconf.rb
CHANGED
File without changes
|
data/ext/gui.cpp
CHANGED
File without changes
|
data/ext/gui.h
CHANGED
File without changes
|
data/ext/iplconvkernel.cpp
CHANGED
File without changes
|
data/ext/iplconvkernel.h
CHANGED
File without changes
|
data/ext/iplimage.cpp
CHANGED
File without changes
|
data/ext/iplimage.h
CHANGED
File without changes
|
data/ext/mouseevent.cpp
CHANGED
data/ext/mouseevent.h
CHANGED
File without changes
|
data/ext/opencv.cpp
CHANGED
@@ -248,6 +248,9 @@ define_ruby_module()
|
|
248
248
|
RESIST_CVMETHOD(match_template_method, "ccoeff", CV_TM_CCOEFF);
|
249
249
|
RESIST_CVMETHOD(match_template_method, "ccoeff_normed", CV_TM_CCOEFF_NORMED);
|
250
250
|
|
251
|
+
VALUE log_polar_method = rb_funcall(interpolation_method, rb_intern("merge"), 1, warp_flag);
|
252
|
+
rb_define_const(rb_module, "LOG_POLAR_METHOD", log_polar_method);
|
253
|
+
|
251
254
|
/* color convert methods */
|
252
255
|
rb_define_module_function(rb_module, "BGR2BGRA", RUBY_METHOD_FUNC(rb_BGR2BGRA), 1);
|
253
256
|
rb_define_module_function(rb_module, "RGB2RGBA", RUBY_METHOD_FUNC(rb_RGB2RGBA), 1);
|
data/ext/opencv.h
CHANGED
@@ -15,12 +15,12 @@
|
|
15
15
|
|
16
16
|
/* include headers */
|
17
17
|
#include <ruby.h>
|
18
|
-
#include <version.h>
|
19
18
|
|
20
19
|
#ifdef RUBY_WIN32_H
|
21
20
|
#ifdef write
|
22
21
|
#undef write
|
23
22
|
#endif // write
|
23
|
+
#pragma warning(disable : 4819)
|
24
24
|
#endif // RUBY_WIN32_H
|
25
25
|
|
26
26
|
#ifndef ANYARGS
|
@@ -28,7 +28,12 @@
|
|
28
28
|
#endif
|
29
29
|
|
30
30
|
extern "C"{
|
31
|
-
#
|
31
|
+
#ifdef HAVE_RUBY_ST_H
|
32
|
+
# include "ruby/st.h"
|
33
|
+
#else
|
34
|
+
# include "st.h"
|
35
|
+
#endif
|
36
|
+
|
32
37
|
#ifdef HAVE_CALLBACK_H
|
33
38
|
#include <callback.h> // callhack.h is ffcall header
|
34
39
|
#endif
|
@@ -203,7 +208,7 @@ CVMETHOD(const char *name, VALUE method, int ifnone = 0)
|
|
203
208
|
return FIX2INT(value);
|
204
209
|
}if (rb_obj_is_kind_of(value, rb_cNumeric))
|
205
210
|
default:
|
206
|
-
rb_raise(rb_eTypeError, "");
|
211
|
+
rb_raise(rb_eTypeError, "undefined method.");
|
207
212
|
}
|
208
213
|
return 0;
|
209
214
|
}
|
@@ -305,7 +310,7 @@ __NAMESPACE_END_OPENCV
|
|
305
310
|
inline VALUE
|
306
311
|
extract_options_from_args_bang(VALUE ary)
|
307
312
|
{
|
308
|
-
return (
|
313
|
+
return (RARRAY_LEN(ary) > 0 && rb_obj_is_kind_of(RARRAY_PTR(ary)[RARRAY_LEN(ary) - 1], rb_cHash)) ? rb_ary_pop(ary) : rb_hash_new();
|
309
314
|
}
|
310
315
|
|
311
316
|
/*
|
data/ext/point3dset.cpp
CHANGED
File without changes
|
data/ext/point3dset.h
CHANGED
File without changes
|
data/ext/pointset.cpp
CHANGED
@@ -176,9 +176,9 @@ __NAMESPACE_END_POINT_SET
|
|
176
176
|
int
|
177
177
|
CVPOINTS_FROM_POINT_SET(VALUE object, CvPoint **pointset)
|
178
178
|
{
|
179
|
-
VALUE storage;
|
180
|
-
CvSeq *seq = 0;
|
181
|
-
CvPoint2D32f p32;
|
179
|
+
//VALUE storage;
|
180
|
+
//CvSeq *seq = 0;
|
181
|
+
//CvPoint2D32f p32;
|
182
182
|
if(rb_obj_is_kind_of(object, cCvSeq::rb_class())){
|
183
183
|
if(CV_IS_SEQ_POINT_SET(CVSEQ(object))){
|
184
184
|
*pointset = (CvPoint*)cvCvtSeqToArray(CVSEQ(object), cvAlloc(CVSEQ(object)->total * CVSEQ(object)->elem_size));
|
@@ -190,12 +190,12 @@ CVPOINTS_FROM_POINT_SET(VALUE object, CvPoint **pointset)
|
|
190
190
|
/* to do */
|
191
191
|
rb_raise(rb_eNotImpError, "CvMat to CvSeq conversion not implemented.");
|
192
192
|
}else if(rb_obj_is_kind_of(object, rb_cArray)){
|
193
|
-
*pointset = (CvPoint*)cvAlloc(
|
194
|
-
for(int i = 0; i <
|
193
|
+
*pointset = (CvPoint*)cvAlloc(RARRAY_LEN(object) * sizeof(CvPoint));
|
194
|
+
for(int i = 0; i < RARRAY_LEN(object); i++){
|
195
195
|
(*pointset)[i].x = NUM2INT(rb_funcall(rb_ary_entry(object, i), rb_intern("x"), 0));
|
196
196
|
(*pointset)[i].y = NUM2INT(rb_funcall(rb_ary_entry(object, i), rb_intern("y"), 0));
|
197
197
|
}
|
198
|
-
return
|
198
|
+
return RARRAY_LEN(object);
|
199
199
|
}else{
|
200
200
|
rb_raise(rb_eTypeError, "Can't convert CvSeq(PointSet).");
|
201
201
|
}
|
@@ -220,10 +220,10 @@ VALUE_TO_POINT_SET(VALUE object)
|
|
220
220
|
rb_raise(rb_eNotImpError, "CvMat to CvSeq conversion not implemented.");
|
221
221
|
}else if(rb_obj_is_kind_of(object, rb_cArray)){
|
222
222
|
//pointset = cCvSeq::new_sequence(cCvSeq::rb_class(), )
|
223
|
-
length =
|
223
|
+
length = RARRAY_LEN(object);
|
224
224
|
storage = cCvMemStorage::new_object();
|
225
225
|
seq = cvCreateSeq(CV_SEQ_POINT_SET, sizeof(CvSeq), sizeof(CvPoint), CVMEMSTORAGE(storage));
|
226
|
-
for(int i = 0; i <
|
226
|
+
for(int i = 0; i < RARRAY_LEN(object); i++){
|
227
227
|
p32.x = NUM2DBL(rb_funcall(rb_ary_entry(object, i), rb_intern("x"), 0));
|
228
228
|
p32.y = NUM2DBL(rb_funcall(rb_ary_entry(object, i), rb_intern("y"), 0));
|
229
229
|
cvSeqPush(seq, &p32);
|
data/ext/pointset.h
CHANGED
File without changes
|
data/ext/trackbar.cpp
CHANGED
@@ -76,7 +76,7 @@ VALUE rb_initialize(int argc, VALUE *argv, VALUE self){
|
|
76
76
|
if(NIL_P(block)){rb_raise(rb_eArgError, "block not given.");}
|
77
77
|
Check_Type(name, T_STRING);
|
78
78
|
Trackbar *trackbar = TRACKBAR(self);
|
79
|
-
trackbar->name = strcpy(ALLOC_N(char,
|
79
|
+
trackbar->name = strcpy(ALLOC_N(char, RSTRING_LEN(name)), StringValueCStr(name));
|
80
80
|
trackbar->maxval = NUM2INT(maxval);
|
81
81
|
trackbar->val = IF_INT(val, 0);
|
82
82
|
trackbar->block = block;
|
data/ext/trackbar.h
CHANGED
File without changes
|
data/ext/window.cpp
CHANGED
@@ -29,7 +29,7 @@ GET_WINDOW_NAME(VALUE object)
|
|
29
29
|
{
|
30
30
|
void *handle = DATA_PTR(object);
|
31
31
|
if (!handle)
|
32
|
-
rb_raise(rb_eStandardError, "window handle error");
|
32
|
+
rb_raise(rb_eStandardError, "window handle error");
|
33
33
|
const char *window_name = cvGetWindowName(handle);
|
34
34
|
return window_name;
|
35
35
|
}
|
@@ -49,9 +49,9 @@ define_ruby_class()
|
|
49
49
|
{
|
50
50
|
if (rb_klass)
|
51
51
|
return;
|
52
|
-
/*
|
52
|
+
/*
|
53
53
|
* opencv = rb_define_module("OpenCV");
|
54
|
-
* GUI = rb_define_module_under(opencv, "GUI");
|
54
|
+
* GUI = rb_define_module_under(opencv, "GUI");
|
55
55
|
*
|
56
56
|
* note: this comment is used by rdoc.
|
57
57
|
*/
|
@@ -96,6 +96,8 @@ each_protect(VALUE key, VALUE value)
|
|
96
96
|
void
|
97
97
|
free(void *ptr)
|
98
98
|
{
|
99
|
+
st_table *holder;
|
100
|
+
if (st_delete(windows, (st_data_t*)ptr, (st_data_t*)&holder)) { st_free_table(holder); }
|
99
101
|
cvFree(&ptr);
|
100
102
|
}
|
101
103
|
|
@@ -112,7 +114,7 @@ rb_aref(VALUE klass, VALUE name)
|
|
112
114
|
Check_Type(name, T_STRING);
|
113
115
|
void *handle = cvGetWindowHandle(StringValueCStr(name));
|
114
116
|
st_table *holder;
|
115
|
-
if (st_lookup(windows, (st_data_t)handle, (st_data_t*)&holder) &&
|
117
|
+
if (st_lookup(windows, (st_data_t)handle, (st_data_t*)&holder) &&
|
116
118
|
st_lookup(holder, 0, (st_data_t*)&window)) {
|
117
119
|
return window;
|
118
120
|
}
|
@@ -217,7 +219,7 @@ rb_resize(int argc, VALUE *argv, VALUE self)
|
|
217
219
|
size = cvSize(FIX2INT(argv[0]), FIX2INT(argv[1]));
|
218
220
|
break;
|
219
221
|
default:
|
220
|
-
rb_raise(rb_eArgError, "wrong number of arguments (1 or 2)");
|
222
|
+
rb_raise(rb_eArgError, "wrong number of arguments (1 or 2)");
|
221
223
|
}
|
222
224
|
cvResizeWindow(GET_WINDOW_NAME(self), size.width, size.height);
|
223
225
|
return self;
|
@@ -242,12 +244,12 @@ rb_move(int argc, VALUE *argv, VALUE self)
|
|
242
244
|
point = cvPoint(FIX2INT(argv[0]), FIX2INT(argv[1]));
|
243
245
|
break;
|
244
246
|
default:
|
245
|
-
rb_raise(rb_eArgError, "wrong number of arguments (1 or 2)");
|
247
|
+
rb_raise(rb_eArgError, "wrong number of arguments (1 or 2)");
|
246
248
|
}
|
247
249
|
cvMoveWindow(GET_WINDOW_NAME(self), point.x, point.y);
|
248
250
|
return self;
|
249
251
|
}
|
250
|
-
|
252
|
+
|
251
253
|
/*
|
252
254
|
* call-seq:
|
253
255
|
* show_image(<i>image</i>)
|
@@ -313,7 +315,7 @@ rb_set_trackbar(int argc, VALUE *argv, VALUE self)
|
|
313
315
|
* window = OpenCV::GUI::Window.new "sample window"
|
314
316
|
* image = OpenCV::IplImage::load "sample.png"
|
315
317
|
* window.show(image)
|
316
|
-
* window.set_mouse_callback{|mouse|
|
318
|
+
* window.set_mouse_callback{|mouse|
|
317
319
|
* e = "#{mouse.x}, #{mouse.y} : #{mouse.event} : "
|
318
320
|
* e << "<L>" if mouse.left_button?
|
319
321
|
* e << "<R>" if mouse.right_button?
|
@@ -325,18 +327,32 @@ rb_set_trackbar(int argc, VALUE *argv, VALUE self)
|
|
325
327
|
* }
|
326
328
|
* OpenCV::GUI::wait_key
|
327
329
|
*/
|
330
|
+
/*
|
328
331
|
VALUE
|
329
332
|
rb_set_mouse_callback(VALUE self)
|
330
|
-
{
|
333
|
+
{
|
331
334
|
VALUE block = rb_block_given_p() ? rb_block_proc() : 0;
|
332
335
|
if (!block) {rb_raise(rb_eArgError, "block not given.");}
|
333
|
-
void *callback = (void *)alloc_callback(&mouse_callback, block);
|
334
|
-
cvSetMouseCallback(GET_WINDOW_NAME(self), (CvMouseCallback)callback);
|
336
|
+
void *callback = (void *)alloc_callback(&mouse_callback, block);
|
337
|
+
cvSetMouseCallback(GET_WINDOW_NAME(self), (CvMouseCallback)callback, 0);
|
335
338
|
st_table *holder;
|
336
339
|
if (st_lookup(windows, (st_data_t)DATA_PTR(self), (st_data_t*)&holder)) {
|
337
340
|
st_insert(holder, rb_cProc, block);
|
338
341
|
}else{
|
339
|
-
rb_raise(rb_eStandardError, "window is
|
342
|
+
rb_raise(rb_eStandardError, "window is destroyed.");
|
343
|
+
}
|
344
|
+
return block;
|
345
|
+
}
|
346
|
+
*/
|
347
|
+
VALUE
|
348
|
+
rb_set_mouse_callback(VALUE self)
|
349
|
+
{
|
350
|
+
VALUE block = rb_block_given_p() ? rb_block_proc() : 0;
|
351
|
+
if (!block) {rb_raise(rb_eArgError, "block not given.");}
|
352
|
+
cvSetMouseCallback(GET_WINDOW_NAME(self), on_mouse, (void*)block);
|
353
|
+
st_table *holder;
|
354
|
+
if (st_lookup(windows, (st_data_t)DATA_PTR(self), (st_data_t*)&holder)){
|
355
|
+
st_insert(holder, self, block);
|
340
356
|
}
|
341
357
|
return block;
|
342
358
|
}
|
@@ -349,20 +365,23 @@ trackbar_callback(VALUE block, va_alist ap)
|
|
349
365
|
va_return_void(ap);
|
350
366
|
}
|
351
367
|
|
368
|
+
/*
|
352
369
|
void
|
353
370
|
mouse_callback(VALUE block, va_alist ap)
|
354
371
|
{
|
355
372
|
va_start_void(ap);
|
356
|
-
//VALUE ary = rb_ary_new2(4);
|
357
|
-
//for (int i = 0; i < 4; i++)
|
358
|
-
// rb_ary_store(ary, i, INT2FIX(va_arg_int(ap)));
|
359
|
-
//rb_apply(block, rb_intern("call"), ary);
|
360
373
|
rb_funcall(block, rb_intern("call"), 1, cMouseEvent::new_object(va_arg_int(ap),va_arg_int(ap),va_arg_int(ap),va_arg_int(ap)));
|
361
374
|
va_return_void(ap);
|
362
375
|
}
|
376
|
+
*/
|
377
|
+
|
378
|
+
void on_mouse( int event, int x, int y, int flags, void* param ) {
|
379
|
+
rb_funcall((VALUE)param, rb_intern("call"), 1, cMouseEvent::new_object(event, x, y, flags));
|
380
|
+
}
|
363
381
|
|
364
382
|
__NAMESPACE_END_WINDOW
|
365
383
|
__NAMESPACE_END_GUI
|
366
384
|
__NAMESPACE_END_OPENCV
|
367
385
|
|
386
|
+
|
368
387
|
#endif // HAVE_CALLBACK_H
|
data/ext/window.h
CHANGED
@@ -45,7 +45,8 @@ VALUE rb_set_trackbar(int argc, VALUE *argv, VALUE self);
|
|
45
45
|
VALUE rb_set_mouse_callback(VALUE self);
|
46
46
|
|
47
47
|
void trackbar_callback(VALUE block, va_alist ap);
|
48
|
-
void mouse_callback(VALUE block, va_alist ap);
|
48
|
+
//void mouse_callback(VALUE block, va_alist ap);
|
49
|
+
void on_mouse( int event, int x, int y, int flags, void* param );
|
49
50
|
|
50
51
|
__NAMESPACE_END_WINDOW
|
51
52
|
__NAMESPACE_END_GUI
|
data/images/CvMat_sobel.png
CHANGED
File without changes
|
data/images/CvMat_sub_rect.png
CHANGED
File without changes
|
File without changes
|
File without changes
|
data/lib/opencv.rb
CHANGED
File without changes
|
data/lib/version.rb
CHANGED
data/setup/setup.cygwin.rb
CHANGED
File without changes
|
data/setup/setup.mingw.rb
CHANGED
File without changes
|
data/setup/setup.mswin32.rb
CHANGED
File without changes
|
data/test/test_opencv.rb
CHANGED
File without changes
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: opencv
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Masakazu Yonekura
|
@@ -10,26 +10,18 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date:
|
13
|
+
date: 2009-03-29 00:00:00 +09:00
|
14
14
|
default_executable:
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: hoe
|
18
|
+
type: :development
|
18
19
|
version_requirement:
|
19
20
|
version_requirements: !ruby/object:Gem::Requirement
|
20
21
|
requirements:
|
21
22
|
- - ">="
|
22
23
|
- !ruby/object:Gem::Version
|
23
|
-
version:
|
24
|
-
version:
|
25
|
-
- !ruby/object:Gem::Dependency
|
26
|
-
name: hoe
|
27
|
-
version_requirement:
|
28
|
-
version_requirements: !ruby/object:Gem::Requirement
|
29
|
-
requirements:
|
30
|
-
- - ">="
|
31
|
-
- !ruby/object:Gem::Version
|
32
|
-
version: 1.6.0
|
24
|
+
version: 1.11.0
|
33
25
|
version:
|
34
26
|
description: OpenCV wrapper for Ruby
|
35
27
|
email:
|
@@ -183,7 +175,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
183
175
|
requirements: []
|
184
176
|
|
185
177
|
rubyforge_project: opencv
|
186
|
-
rubygems_version: 1.
|
178
|
+
rubygems_version: 1.3.1
|
187
179
|
signing_key:
|
188
180
|
specification_version: 2
|
189
181
|
summary: OpenCV wrapper for Ruby.
|