opencv 0.0.6 → 0.0.7
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 +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.
|