opencv 0.0.6 → 0.0.7

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 +0 -0
  2. data/License.txt +0 -0
  3. data/Manifest.txt +0 -0
  4. data/README.txt +0 -0
  5. data/Rakefile +1 -1
  6. data/examples/convexhull.rb +0 -0
  7. data/examples/face_detect.rb +0 -0
  8. data/examples/houghcircle.rb +0 -0
  9. data/examples/inpaint.png +0 -0
  10. data/examples/inpaint.rb +0 -0
  11. data/examples/paint.rb +0 -0
  12. data/examples/snake.rb +0 -0
  13. data/examples/stuff.jpg +0 -0
  14. data/ext/curve.cpp +0 -0
  15. data/ext/curve.h +0 -0
  16. data/ext/cvavgcomp.cpp +0 -0
  17. data/ext/cvavgcomp.h +0 -0
  18. data/ext/cvbox2d.cpp +0 -0
  19. data/ext/cvbox2d.h +0 -0
  20. data/ext/cvcapture.cpp +0 -0
  21. data/ext/cvcapture.h +0 -0
  22. data/ext/cvchain.cpp +3 -6
  23. data/ext/cvchain.h +0 -0
  24. data/ext/cvchaincode.cpp +0 -0
  25. data/ext/cvchaincode.h +0 -0
  26. data/ext/cvcircle32f.cpp +0 -0
  27. data/ext/cvcircle32f.h +0 -0
  28. data/ext/cvcondensation.cpp +0 -0
  29. data/ext/cvcondensation.h +0 -0
  30. data/ext/cvconnectedcomp.cpp +0 -0
  31. data/ext/cvconnectedcomp.h +0 -0
  32. data/ext/cvcontour.cpp +0 -0
  33. data/ext/cvcontour.h +0 -0
  34. data/ext/cvcontourtree.cpp +0 -0
  35. data/ext/cvcontourtree.h +0 -0
  36. data/ext/cvconvexitydefect.cpp +0 -0
  37. data/ext/cvconvexitydefect.h +0 -0
  38. data/ext/cverror.cpp +0 -0
  39. data/ext/cverror.h +0 -0
  40. data/ext/cvfont.cpp +0 -0
  41. data/ext/cvfont.h +0 -0
  42. data/ext/cvhaarclassifiercascade.cpp +1 -1
  43. data/ext/cvhaarclassifiercascade.h +0 -0
  44. data/ext/cvhistogram.cpp +27 -2
  45. data/ext/cvhistogram.h +3 -0
  46. data/ext/cvindex.cpp +0 -0
  47. data/ext/cvindex.h +0 -0
  48. data/ext/cvline.cpp +0 -0
  49. data/ext/cvline.h +0 -0
  50. data/ext/cvmat.cpp +74 -47
  51. data/ext/cvmat.h +1 -1
  52. data/ext/cvmatnd.cpp +0 -0
  53. data/ext/cvmatnd.h +0 -0
  54. data/ext/cvmemstorage.cpp +0 -0
  55. data/ext/cvmemstorage.h +0 -0
  56. data/ext/cvmoments.cpp +0 -0
  57. data/ext/cvmoments.h +0 -0
  58. data/ext/cvpoint.cpp +0 -0
  59. data/ext/cvpoint.h +0 -0
  60. data/ext/cvpoint2d32f.cpp +0 -0
  61. data/ext/cvpoint2d32f.h +0 -0
  62. data/ext/cvpoint3d32f.cpp +0 -0
  63. data/ext/cvpoint3d32f.h +0 -0
  64. data/ext/cvrect.cpp +0 -0
  65. data/ext/cvrect.h +0 -0
  66. data/ext/cvscalar.cpp +0 -0
  67. data/ext/cvscalar.h +0 -0
  68. data/ext/cvseq.cpp +4 -4
  69. data/ext/cvseq.h +0 -0
  70. data/ext/cvset.cpp +0 -0
  71. data/ext/cvset.h +0 -0
  72. data/ext/cvsize.cpp +0 -0
  73. data/ext/cvsize.h +0 -0
  74. data/ext/cvsize2d32f.cpp +0 -0
  75. data/ext/cvsize2d32f.h +0 -0
  76. data/ext/cvslice.cpp +0 -0
  77. data/ext/cvslice.h +0 -0
  78. data/ext/cvsparsemat.cpp +0 -0
  79. data/ext/cvsparsemat.h +0 -0
  80. data/ext/cvtermcriteria.cpp +0 -0
  81. data/ext/cvtermcriteria.h +2 -2
  82. data/ext/cvtwopoints.cpp +0 -0
  83. data/ext/cvtwopoints.h +0 -0
  84. data/ext/cvvector.cpp +0 -0
  85. data/ext/cvvector.h +0 -0
  86. data/ext/cvvideowriter.cpp +4 -4
  87. data/ext/cvvideowriter.h +0 -0
  88. data/ext/extconf.rb +0 -0
  89. data/ext/gui.cpp +0 -0
  90. data/ext/gui.h +0 -0
  91. data/ext/iplconvkernel.cpp +0 -0
  92. data/ext/iplconvkernel.h +0 -0
  93. data/ext/iplimage.cpp +0 -0
  94. data/ext/iplimage.h +0 -0
  95. data/ext/mouseevent.cpp +1 -1
  96. data/ext/mouseevent.h +0 -0
  97. data/ext/opencv.cpp +3 -0
  98. data/ext/opencv.h +9 -4
  99. data/ext/point3dset.cpp +0 -0
  100. data/ext/point3dset.h +0 -0
  101. data/ext/pointset.cpp +8 -8
  102. data/ext/pointset.h +0 -0
  103. data/ext/trackbar.cpp +1 -1
  104. data/ext/trackbar.h +0 -0
  105. data/ext/window.cpp +35 -16
  106. data/ext/window.h +2 -1
  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 +0 -0
  112. data/lib/version.rb +1 -1
  113. data/setup/setup.cygwin.rb +0 -0
  114. data/setup/setup.mingw.rb +0 -0
  115. data/setup/setup.mswin32.rb +0 -0
  116. data/test/test_opencv.rb +0 -0
  117. metadata +5 -13
File without changes
File without changes
File without changes
data/README.txt CHANGED
File without changes
data/Rakefile CHANGED
@@ -28,7 +28,7 @@ EOF
28
28
 
29
29
  p.url = 'http://blueruby.mydns.jp/opencv'
30
30
 
31
- p.extra_deps << ['hoe']
31
+ # p.extra_deps <<
32
32
  end
33
33
 
34
34
  # vim: syntax=Ruby
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -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) ({VALUE _recursive = rb_hash_aref(op, ID2SYM(rb_intern("recursive"))); NIL_P(_recursive) ? 0 : _recursive == Qfalse ? 0 : 1;})
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
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -78,7 +78,7 @@ rb_load(VALUE klass, VALUE path)
78
78
  VALUE
79
79
  rb_save(VALUE self, VALUE path)
80
80
  {
81
- rb_raise(rb_eNotImpError, "");
81
+ rb_raise(rb_eNotImpError, "not yet.");
82
82
  }
83
83
 
84
84
  /*
File without changes
@@ -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
- // not yet
58
- return Qnil;
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!
@@ -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
 
File without changes
File without changes
File without changes
File without changes
@@ -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"))) == ID2SYM("aa") ? INT2FIX(CV_AA) : 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) ({VALUE _is_closed = rb_hash_aref(op, ID2SYM(rb_intern("is_closed"))); NIL_P(_is_closed) ? 0 : _is_closed == Qfalse ? 0 : 1;})
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
- rb_define_method(rb_klass, "initialize", RUBY_METHOD_FUNC(rb_initialize), -1);
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
- //rb_define_method(rb_klass, "log_polar", RUBY_METHOD_FUNC(rb_log_polar), -1);
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 (RARRAY(args)->len != 0 || !rb_respond_to(rb_module_opencv(), rb_intern(StringValuePtr(method))))
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(RARRAY(args)->len) {
890
+ switch(RARRAY_LEN(args)) {
890
891
  case 1:
891
- area = VALUE_TO_CVRECT(RARRAY(args)->ptr[0]);
892
+ area = VALUE_TO_CVRECT(RARRAY_PTR(args)[0]);
892
893
  break;
893
894
  case 2:
894
- topleft = VALUE_TO_CVPOINT(RARRAY(args)->ptr[0]);
895
- size = VALUE_TO_CVSIZE(RARRAY(args)->ptr[1]);
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(RARRAY(args)->ptr[0]);
903
- area.y = NUM2INT(RARRAY(args)->ptr[1]);
904
- area.width = NUM2INT(RARRAY(args)->ptr[2]);
905
- area.height = NUM2INT(RARRAY(args)->ptr[3]);
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 (%d of 1 or 2 or 4)", RARRAY(args)->len);
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 = RARRAY(args)->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 RARRAY(ary)->len > 1 ? ary : rb_ary_entry(ary, 0);
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 = RARRAY(args)->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 RARRAY(ary)->len > 1 ? ary : rb_ary_entry(ary, 0);
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 < RARRAY(args)->len; 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(RARRAY(args)->len) {
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 < RARRAY(args)->len; 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(RARRAY(args)->len) {
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 = RARRAY(args)->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 = dest = new_object(cvGetSize(CVARR(self)), CV_8UC1), tmp;
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, mean;
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, magnitude, </i>)
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
- VALUE size, center, m, flags, fillval, dest;
3327
- rb_scan_args(argc, argv, "3*", &size, &center, &m, &flags);
3328
- dest = cCvMat::new_object();
3351
+ VALUE size, center, m, args, dest; //interpolation, warp, dest;
3352
+ rb_scan_args(argc, argv, "3*", &size, &center, &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(self));
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);
@@ -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);
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -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 < RARRAY(args)->len; i++){
347
- object = RARRAY(args)->ptr[i];
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 < RARRAY(args)->len; i++){
407
- object = RARRAY(args)->ptr[i];
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){
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -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 (RARRAY(object)->len == 2) {
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
File without changes
File without changes
File without changes
File without changes
@@ -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 (RSTRING(filename)->len == 0)
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 (RSTRING(fourcc)->len > 4)
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 < RSTRING(fourcc)->len; i++)
73
- codec[i] = RSTRING(fourcc)->ptr[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
  }
File without changes
File without changes
File without changes
data/ext/gui.h CHANGED
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -166,7 +166,7 @@ rb_alt_key_q(VALUE self)
166
166
  }
167
167
 
168
168
  VALUE
169
- new_object(int flag, int y, int x, int event)
169
+ new_object(int event, int x, int y, int flag)
170
170
  {
171
171
  VALUE object = rb_allocate(rb_class());
172
172
  MouseEvent *mouseevent = MOUSEEVENT(object);
File without changes
@@ -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);
@@ -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
- #include <st.h>
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 (RARRAY(ary)->len > 0 && rb_obj_is_kind_of(RARRAY(ary)->ptr[RARRAY(ary)->len -1], rb_cHash)) ? rb_ary_pop(ary) : rb_hash_new();
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
  /*
File without changes
File without changes
@@ -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(RARRAY(object)->len * sizeof(CvPoint));
194
- for(int i = 0; i < RARRAY(object)->len; 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 RARRAY(object)->len;
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 = RARRAY(object)->len;
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 < RARRAY(object)->len; 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);
File without changes
@@ -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, RSTRING(name)->len), StringValueCStr(name));
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;
File without changes
@@ -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 destroied.");
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
@@ -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
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -1,3 +1,3 @@
1
1
  module OpenCV
2
- VERSION = '0.0.6'
2
+ VERSION = '0.0.7'
3
3
  end
File without changes
File without changes
File without changes
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.6
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: 2008-06-29 00:00:00 +09:00
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: "0"
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.0.1
178
+ rubygems_version: 1.3.1
187
179
  signing_key:
188
180
  specification_version: 2
189
181
  summary: OpenCV wrapper for Ruby.