ruby-opencv 0.0.13 → 0.0.14.pre
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.
- checksums.yaml +4 -4
- data/README.md +1 -1
- data/ext/opencv/cvcontour.cpp +29 -11
- data/ext/opencv/cvhistogram.cpp +3 -1
- data/ext/opencv/cvmat.cpp +55 -11
- data/ext/opencv/cvmat.h +1 -1
- data/ext/opencv/cvmemstorage.h +2 -5
- data/ext/opencv/cvseq.cpp +120 -77
- data/ext/opencv/cvseq.h +1 -0
- data/ext/opencv/opencv.cpp +41 -0
- data/lib/opencv/version.rb +1 -1
- data/ruby-opencv.gemspec +9 -9
- data/test/test_cvconnectedcomp.rb +2 -2
- data/test/test_cvcontourtree.rb +2 -2
- data/test/test_cvhistogram.rb +1 -1
- data/test/test_cvmat.rb +33 -0
- data/test/test_cvseq.rb +57 -41
- data/test/test_opencv.rb +3 -3
- metadata +42 -42
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 71aaaae8164e4c82e1c7c4a3b116e8787fcbb0e1
|
|
4
|
+
data.tar.gz: 95a6a2a13df382c9d67e756fb14a077e1b28502d
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 2a1ec32344fb24d00f0fb7c723cfcc432caa10198264b84fe4e592dae316f1d8abc0a6abf6af263597f332b540b40331080c0655f59531a262130cb253013723
|
|
7
|
+
data.tar.gz: a5c995d554674fd4bb3de6e419106b095ea216aba738c070b6c16fdcf2ccff32230bf25ee3557e1439bcdab3b8d0bb0b98fd8e08d4d2ef6a26df91c1e5fc9d2e
|
data/README.md
CHANGED
data/ext/opencv/cvcontour.cpp
CHANGED
|
@@ -42,31 +42,49 @@ rb_allocate(VALUE klass)
|
|
|
42
42
|
|
|
43
43
|
/*
|
|
44
44
|
* Constructor
|
|
45
|
-
*
|
|
45
|
+
*
|
|
46
|
+
* @overload new(seq_flags = CV_SEQ_ELTYPE_POINT | CV_SEQ_KIND_GENERIC, storage = nil)
|
|
47
|
+
* @param [Fixnum] seq_flags Flags of the created sequence, which are combinations of
|
|
48
|
+
* the element types and sequence types.
|
|
49
|
+
* - Element type:
|
|
50
|
+
* - <tt>CV_SEQ_ELTYPE_POINT</tt>: {CvPoint}
|
|
51
|
+
* - <tt>CV_32FC2</tt>: {CvPoint2D32f}
|
|
52
|
+
* - <tt>CV_SEQ_ELTYPE_POINT3D</tt>: {CvPoint3D32f}
|
|
53
|
+
* - <tt>CV_SEQ_ELTYPE_INDEX</tt>: Fixnum
|
|
54
|
+
* - <tt>CV_SEQ_ELTYPE_CODE</tt>: Fixnum (Freeman code)
|
|
55
|
+
* - Sequence type:
|
|
56
|
+
* - <tt>CV_SEQ_KIND_GENERIC</tt>: Generic sequence
|
|
57
|
+
* - <tt>CV_SEQ_KIND_CURVE</tt>: Curve
|
|
46
58
|
* @param [CvMemStorage] storage Sequence location
|
|
47
59
|
* @return [CvContour] self
|
|
48
60
|
* @opencv_func cvCreateSeq
|
|
61
|
+
* @example
|
|
62
|
+
* seq = CvContour.new(CV_SEQ_ELTYPE_POINT | CV_SEQ_KIND_CURVE)
|
|
63
|
+
* seq << CvPoint.new(1, 2)
|
|
64
|
+
* seq << 3 #=> TypeError
|
|
49
65
|
*/
|
|
50
66
|
VALUE
|
|
51
67
|
rb_initialize(int argc, VALUE *argv, VALUE self)
|
|
52
68
|
{
|
|
53
|
-
VALUE
|
|
54
|
-
rb_scan_args(argc, argv, "
|
|
69
|
+
VALUE seq_flags_value, storage_value;
|
|
70
|
+
rb_scan_args(argc, argv, "02", &seq_flags_value, &storage_value);
|
|
55
71
|
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
72
|
+
int seq_flags = 0;
|
|
73
|
+
if (NIL_P(seq_flags_value)) {
|
|
74
|
+
seq_flags = CV_SEQ_ELTYPE_POINT | CV_SEQ_KIND_GENERIC;
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
Check_Type(seq_flags_value, T_FIXNUM);
|
|
78
|
+
seq_flags = FIX2INT(seq_flags_value);
|
|
79
|
+
}
|
|
80
|
+
storage_value = CHECK_CVMEMSTORAGE(storage_value);
|
|
60
81
|
|
|
61
82
|
try {
|
|
62
|
-
DATA_PTR(self) = (CvContour*)
|
|
63
|
-
sizeof(CvPoint), CVMEMSTORAGE(storage));
|
|
83
|
+
DATA_PTR(self) = (CvContour*)cCvSeq::create_seq(seq_flags, sizeof(CvContour), storage_value);
|
|
64
84
|
}
|
|
65
85
|
catch (cv::Exception& e) {
|
|
66
86
|
raise_cverror(e);
|
|
67
87
|
}
|
|
68
|
-
cCvSeq::register_elem_class(CVSEQ(self), cCvPoint::rb_class());
|
|
69
|
-
register_root_object(CVSEQ(self), storage);
|
|
70
88
|
|
|
71
89
|
return self;
|
|
72
90
|
}
|
data/ext/opencv/cvhistogram.cpp
CHANGED
|
@@ -193,6 +193,9 @@ rb_calc_hist_bang(int argc, VALUE* argv, VALUE self)
|
|
|
193
193
|
rb_scan_args(argc, argv, "12", &images, &accumulate, &mask);
|
|
194
194
|
Check_Type(images, T_ARRAY);
|
|
195
195
|
int num_images = RARRAY_LEN(images);
|
|
196
|
+
if (num_images == 0) {
|
|
197
|
+
rb_raise(rb_eArgError, "One or more arrays are required.");
|
|
198
|
+
}
|
|
196
199
|
IplImage** img = ALLOCA_N(IplImage*, num_images);
|
|
197
200
|
VALUE* images_ptr = RARRAY_PTR(images);
|
|
198
201
|
for (int i = 0; i < num_images; i++) {
|
|
@@ -205,7 +208,6 @@ rb_calc_hist_bang(int argc, VALUE* argv, VALUE self)
|
|
|
205
208
|
catch (cv::Exception& e) {
|
|
206
209
|
raise_cverror(e);
|
|
207
210
|
}
|
|
208
|
-
|
|
209
211
|
return self;
|
|
210
212
|
}
|
|
211
213
|
|
data/ext/opencv/cvmat.cpp
CHANGED
|
@@ -2276,6 +2276,47 @@ rb_min_max_loc(int argc, VALUE *argv, VALUE self)
|
|
|
2276
2276
|
return rb_ary_new3(4, rb_float_new(min_val), rb_float_new(max_val), min_loc, max_loc);
|
|
2277
2277
|
}
|
|
2278
2278
|
|
|
2279
|
+
/*
|
|
2280
|
+
* Calculates an absolute array norm, an absolute difference norm, or a relative difference norm.
|
|
2281
|
+
*
|
|
2282
|
+
* @overload norm(src1, src2=nil, norm_type=NORM_L2, mask=nil)
|
|
2283
|
+
* @param src1 [CvMat] First input array.
|
|
2284
|
+
* @param src2 [CvMat] Second input array of the same size and the same type as <tt>src1</tt>.
|
|
2285
|
+
* @param norm_type [Integer] Type of the norm.
|
|
2286
|
+
* @param mask [CvMat] Optional operation mask; it must have the same size as <tt>src1</tt> and <tt>CV_8UC1</tt> type.
|
|
2287
|
+
* @return [Number] The norm of two arrays.
|
|
2288
|
+
* @opencv_func cvNorm
|
|
2289
|
+
* @scope class
|
|
2290
|
+
*/
|
|
2291
|
+
VALUE
|
|
2292
|
+
rb_norm(int argc, VALUE *argv, VALUE self)
|
|
2293
|
+
{
|
|
2294
|
+
VALUE src1, src2, norm_type_val, mask_val;
|
|
2295
|
+
rb_scan_args(argc, argv, "13", &src1, &src2, &norm_type_val, &mask_val);
|
|
2296
|
+
|
|
2297
|
+
CvMat *src1_ptr = NULL;
|
|
2298
|
+
CvMat *src2_ptr = NULL;
|
|
2299
|
+
int norm_type = NIL_P(norm_type_val) ? cv::NORM_L2 : NUM2INT(norm_type_val);
|
|
2300
|
+
CvMat *mask = NULL;
|
|
2301
|
+
double norm = 0.0;
|
|
2302
|
+
|
|
2303
|
+
try {
|
|
2304
|
+
src1_ptr = CVMAT_WITH_CHECK(src1);
|
|
2305
|
+
if (!NIL_P(src2)) {
|
|
2306
|
+
src2_ptr = CVMAT_WITH_CHECK(src2);
|
|
2307
|
+
}
|
|
2308
|
+
if (!NIL_P(mask_val)) {
|
|
2309
|
+
mask = CVMAT_WITH_CHECK(mask_val);
|
|
2310
|
+
}
|
|
2311
|
+
norm = cvNorm(src1_ptr, src2_ptr, norm_type, mask);
|
|
2312
|
+
}
|
|
2313
|
+
catch (cv::Exception& e) {
|
|
2314
|
+
raise_cverror(e);
|
|
2315
|
+
}
|
|
2316
|
+
|
|
2317
|
+
return DBL2NUM(norm);
|
|
2318
|
+
}
|
|
2319
|
+
|
|
2279
2320
|
/*
|
|
2280
2321
|
* Calculates the dot product of two arrays in Euclidean metrics.
|
|
2281
2322
|
*
|
|
@@ -4055,17 +4096,19 @@ rb_dilate_bang(int argc, VALUE *argv, VALUE self)
|
|
|
4055
4096
|
}
|
|
4056
4097
|
|
|
4057
4098
|
/*
|
|
4058
|
-
*
|
|
4059
|
-
* morpholohy(operation[,element = nil][,iteration = 1]) -> cvmat
|
|
4099
|
+
* Performs advanced morphological transformations using erosion and dilation as basic operations.
|
|
4060
4100
|
*
|
|
4061
|
-
*
|
|
4062
|
-
*
|
|
4063
|
-
*
|
|
4064
|
-
*
|
|
4065
|
-
*
|
|
4066
|
-
*
|
|
4067
|
-
*
|
|
4068
|
-
*
|
|
4101
|
+
* @overload morphology(operation, element = nil, iteration = 1)
|
|
4102
|
+
* @param operation [Integer] Type of morphological operation.
|
|
4103
|
+
* * <tt>CV_MOP_OPEN</tt> - Opening
|
|
4104
|
+
* * <tt>CV_MOP_CLOSE</tt> - Closing
|
|
4105
|
+
* * <tt>CV_MOP_GRADIENT</tt> - Morphological gradient
|
|
4106
|
+
* * <tt>CV_MOP_TOPHAT</tt> - Top hat
|
|
4107
|
+
* * <tt>CV_MOP_BLACKHAT</tt> - Black hat
|
|
4108
|
+
* @param element [IplConvKernel] Structuring element.
|
|
4109
|
+
* @param iteration [Integer] Number of times erosion and dilation are applied.
|
|
4110
|
+
* @return [CvMat] Result array
|
|
4111
|
+
* @opencv_func cvMorphologyEx
|
|
4069
4112
|
*/
|
|
4070
4113
|
VALUE
|
|
4071
4114
|
rb_morphology(int argc, VALUE *argv, VALUE self)
|
|
@@ -5087,7 +5130,7 @@ rb_inpaint(VALUE self, VALUE inpaint_method, VALUE mask, VALUE radius)
|
|
|
5087
5130
|
|
|
5088
5131
|
/*
|
|
5089
5132
|
* call-seq:
|
|
5090
|
-
* equalize_hist
|
|
5133
|
+
* equalize_hist -> cvmat
|
|
5091
5134
|
*
|
|
5092
5135
|
* Equalize histgram of grayscale of image.
|
|
5093
5136
|
*
|
|
@@ -5911,6 +5954,7 @@ init_ruby_class()
|
|
|
5911
5954
|
rb_define_method(rb_klass, "avg_sdv", RUBY_METHOD_FUNC(rb_avg_sdv), -1);
|
|
5912
5955
|
rb_define_method(rb_klass, "sdv", RUBY_METHOD_FUNC(rb_sdv), -1);
|
|
5913
5956
|
rb_define_method(rb_klass, "min_max_loc", RUBY_METHOD_FUNC(rb_min_max_loc), -1);
|
|
5957
|
+
rb_define_singleton_method(rb_klass, "norm", RUBY_METHOD_FUNC(rb_norm), -1);
|
|
5914
5958
|
rb_define_method(rb_klass, "dot_product", RUBY_METHOD_FUNC(rb_dot_product), 1);
|
|
5915
5959
|
rb_define_method(rb_klass, "cross_product", RUBY_METHOD_FUNC(rb_cross_product), 1);
|
|
5916
5960
|
rb_define_method(rb_klass, "transform", RUBY_METHOD_FUNC(rb_transform), -1);
|
data/ext/opencv/cvmat.h
CHANGED
|
@@ -119,7 +119,7 @@ VALUE rb_avg_sdv(int argc, VALUE *argv, VALUE self);
|
|
|
119
119
|
VALUE rb_sdv(int argc, VALUE *argv, VALUE self);
|
|
120
120
|
VALUE rb_min_max_loc(int argc, VALUE *argv, VALUE self);
|
|
121
121
|
|
|
122
|
-
|
|
122
|
+
VALUE rb_norm(int argc, VALUE *argv, VALUE self);
|
|
123
123
|
VALUE rb_dot_product(VALUE self, VALUE mat);
|
|
124
124
|
VALUE rb_cross_product(VALUE self, VALUE mat);
|
|
125
125
|
// VALUE rb_gemm();
|
data/ext/opencv/cvmemstorage.h
CHANGED
|
@@ -39,13 +39,10 @@ CVMEMSTORAGE(VALUE object)
|
|
|
39
39
|
inline VALUE
|
|
40
40
|
CHECK_CVMEMSTORAGE(VALUE object)
|
|
41
41
|
{
|
|
42
|
-
if (rb_obj_is_kind_of(object, cCvMemStorage::rb_class()))
|
|
42
|
+
if (rb_obj_is_kind_of(object, cCvMemStorage::rb_class())) {
|
|
43
43
|
return object;
|
|
44
|
-
else {
|
|
45
|
-
if (!NIL_P(object))
|
|
46
|
-
rb_warn("invalid CvMemStorage object given. allocate new memory storage automatically.");
|
|
47
|
-
return cCvMemStorage::new_object();
|
|
48
44
|
}
|
|
45
|
+
return cCvMemStorage::new_object();
|
|
49
46
|
}
|
|
50
47
|
|
|
51
48
|
__NAMESPACE_END_OPENCV
|
data/ext/opencv/cvseq.cpp
CHANGED
|
@@ -10,27 +10,6 @@
|
|
|
10
10
|
#include "cvseq.h"
|
|
11
11
|
/*
|
|
12
12
|
* Document-class: OpenCV::CvSeq
|
|
13
|
-
*
|
|
14
|
-
* Generic Sequence class. CvSeq has the method like Array (push, pop, select, etc...).
|
|
15
|
-
* But, CvSeq cannot store the object of a different class.
|
|
16
|
-
* When storing object in CvSeq, conversion is automatically tried,
|
|
17
|
-
* and the object occurs the error if it cannot be done.
|
|
18
|
-
*
|
|
19
|
-
* e.g.
|
|
20
|
-
* seq = CvSeq.new(CvPoint) # Argument mean "this sequence contain only this class's object"
|
|
21
|
-
* seq.push(CvPoint.new(0, 0)) # => it's ok
|
|
22
|
-
* seq.push("hello") # => try convert "hello" to CvPoint. but can't do it. raise error.
|
|
23
|
-
*
|
|
24
|
-
* If the sequecne contain object of class A.
|
|
25
|
-
* When storing object(named "obj") of class B to the sequence.
|
|
26
|
-
* Try automatically : A.from_B(obj) => object of class A.
|
|
27
|
-
*
|
|
28
|
-
* The sequence might have another sequence outside. see below.
|
|
29
|
-
* Each sequece has h_prev, h_next, v_prev, v_next method.
|
|
30
|
-
* If the adjoining sequence exists, each method return the adjoining sequence.
|
|
31
|
-
* Otherwise return nil.
|
|
32
|
-
*
|
|
33
|
-
* link:../images/CvSeq_relationmap.png
|
|
34
13
|
*/
|
|
35
14
|
__NAMESPACE_BEGIN_OPENCV
|
|
36
15
|
__NAMESPACE_BEGIN_CVSEQ
|
|
@@ -80,62 +59,116 @@ rb_allocate(VALUE klass)
|
|
|
80
59
|
return Data_Wrap_Struct(klass, 0, unregister_elem_class, ptr);
|
|
81
60
|
}
|
|
82
61
|
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
* CvSeq.new(type[,storage])
|
|
86
|
-
*
|
|
87
|
-
* Return a new CvSeq. <i>type</i> should be following classes.
|
|
88
|
-
*
|
|
89
|
-
* * CvIndex
|
|
90
|
-
* * CvPoint
|
|
91
|
-
*/
|
|
92
|
-
VALUE
|
|
93
|
-
rb_initialize(int argc, VALUE *argv, VALUE self)
|
|
62
|
+
CvSeq*
|
|
63
|
+
create_seq(int seq_flags, size_t header_size, VALUE storage_value)
|
|
94
64
|
{
|
|
95
|
-
VALUE klass
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
65
|
+
VALUE klass = Qnil;
|
|
66
|
+
int eltype = seq_flags & CV_SEQ_ELTYPE_MASK;
|
|
67
|
+
storage_value = CHECK_CVMEMSTORAGE(storage_value);
|
|
68
|
+
|
|
69
|
+
switch (eltype) {
|
|
70
|
+
case CV_SEQ_ELTYPE_POINT:
|
|
71
|
+
klass = cCvPoint::rb_class();
|
|
72
|
+
break;
|
|
73
|
+
case CV_32FC2:
|
|
74
|
+
klass = cCvPoint2D32f::rb_class();
|
|
75
|
+
break;
|
|
76
|
+
case CV_SEQ_ELTYPE_POINT3D:
|
|
77
|
+
klass = cCvPoint3D32f::rb_class();
|
|
78
|
+
break;
|
|
79
|
+
case CV_SEQ_ELTYPE_CODE:
|
|
80
|
+
case CV_SEQ_ELTYPE_INDEX:
|
|
81
|
+
klass = rb_cFixnum;
|
|
82
|
+
break;
|
|
83
|
+
case CV_SEQ_ELTYPE_PPOINT: // or CV_SEQ_ELTYPE_PTR:
|
|
84
|
+
// Not supported
|
|
85
|
+
rb_raise(rb_eArgError, "seq_flags %d is not supported.", eltype);
|
|
86
|
+
break;
|
|
87
|
+
default:
|
|
88
|
+
seq_flags = CV_SEQ_ELTYPE_POINT | CV_SEQ_KIND_GENERIC;
|
|
89
|
+
klass = cCvPoint::rb_class();
|
|
90
|
+
break;
|
|
91
|
+
}
|
|
100
92
|
|
|
101
|
-
int
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
93
|
+
int mat_type = CV_MAT_TYPE(seq_flags);
|
|
94
|
+
size_t elem_size = (size_t)(CV_ELEM_SIZE(mat_type));
|
|
95
|
+
CvSeq* seq = NULL;
|
|
96
|
+
try {
|
|
97
|
+
seq = cvCreateSeq(seq_flags, header_size, elem_size, CVMEMSTORAGE(storage_value));
|
|
105
98
|
}
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
99
|
+
catch (cv::Exception& e) {
|
|
100
|
+
raise_cverror(e);
|
|
101
|
+
}
|
|
102
|
+
register_elem_class(seq, klass);
|
|
103
|
+
register_root_object(seq, storage_value);
|
|
104
|
+
|
|
105
|
+
return seq;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
VALUE
|
|
109
|
+
class2seq_flags_value(VALUE klass) {
|
|
110
|
+
int seq_flags;
|
|
111
|
+
if (klass == cCvPoint::rb_class()) {
|
|
112
|
+
seq_flags = CV_SEQ_ELTYPE_POINT;
|
|
109
113
|
}
|
|
110
114
|
else if (klass == cCvPoint2D32f::rb_class()) {
|
|
111
|
-
|
|
112
|
-
size = sizeof(CvPoint2D32f);
|
|
115
|
+
seq_flags = CV_32FC2;
|
|
113
116
|
}
|
|
114
117
|
else if (klass == cCvPoint3D32f::rb_class()) {
|
|
115
|
-
|
|
116
|
-
size = sizeof(CvPoint3D32f);
|
|
118
|
+
seq_flags = CV_SEQ_ELTYPE_POINT3D;
|
|
117
119
|
}
|
|
118
|
-
else
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
CvSeq* seq = NULL;
|
|
122
|
-
if (NIL_P(storage_value)) {
|
|
123
|
-
storage_value = cCvMemStorage::new_object(0);
|
|
120
|
+
else if (klass == rb_cFixnum) {
|
|
121
|
+
seq_flags = CV_SEQ_ELTYPE_INDEX;
|
|
124
122
|
}
|
|
125
123
|
else {
|
|
126
|
-
|
|
124
|
+
rb_raise(rb_eTypeError, "unexpected type: %s", rb_class2name(klass));
|
|
127
125
|
}
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
126
|
+
|
|
127
|
+
return INT2NUM(seq_flags | CV_SEQ_KIND_GENERIC);
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
/*
|
|
131
|
+
* Constructor
|
|
132
|
+
*
|
|
133
|
+
* @overload new(seq_flags, storage = nil)
|
|
134
|
+
* @param [Fixnum] seq_flags Flags of the created sequence, which are combinations of
|
|
135
|
+
* the element types and sequence types.
|
|
136
|
+
* - Element type:
|
|
137
|
+
* - <tt>CV_SEQ_ELTYPE_POINT</tt>: {CvPoint}
|
|
138
|
+
* - <tt>CV_32FC2</tt>: {CvPoint2D32f}
|
|
139
|
+
* - <tt>CV_SEQ_ELTYPE_POINT3D</tt>: {CvPoint3D32f}
|
|
140
|
+
* - <tt>CV_SEQ_ELTYPE_INDEX</tt>: Fixnum
|
|
141
|
+
* - <tt>CV_SEQ_ELTYPE_CODE</tt>: Fixnum (Freeman code)
|
|
142
|
+
* - Sequence type:
|
|
143
|
+
* - <tt>CV_SEQ_KIND_GENERIC</tt>: Generic sequence
|
|
144
|
+
* - <tt>CV_SEQ_KIND_CURVE</tt>: Curve
|
|
145
|
+
* @param [CvMemStorage] storage Sequence location
|
|
146
|
+
* @return [CvSeq] self
|
|
147
|
+
* @opencv_func cvCreateSeq
|
|
148
|
+
* @example
|
|
149
|
+
* seq1 = CvSeq.new(CV_SEQ_ELTYPE_INDEX)
|
|
150
|
+
* seq1 << 1
|
|
151
|
+
* seq1 << CvPoint.new(1, 2) #=> TypeError
|
|
152
|
+
*
|
|
153
|
+
* seq2 = CvSeq.new(CV_SEQ_ELTYPE_POINT | CV_SEQ_KIND_CURVE)
|
|
154
|
+
* seq2 << CvPoint.new(1, 2)
|
|
155
|
+
* seq2 << 3 #=> TypeError
|
|
156
|
+
*/
|
|
157
|
+
VALUE
|
|
158
|
+
rb_initialize(int argc, VALUE *argv, VALUE self)
|
|
159
|
+
{
|
|
160
|
+
VALUE seq_flags_value, storage_value;
|
|
161
|
+
rb_scan_args(argc, argv, "11", &seq_flags_value, &storage_value);
|
|
162
|
+
int seq_flags = 0;
|
|
163
|
+
|
|
164
|
+
if (TYPE(seq_flags_value) == T_CLASS) { // To maintain backward compatibility
|
|
165
|
+
seq_flags_value = class2seq_flags_value(seq_flags_value);
|
|
134
166
|
}
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
167
|
+
Check_Type(seq_flags_value, T_FIXNUM);
|
|
168
|
+
seq_flags = FIX2INT(seq_flags_value);
|
|
169
|
+
|
|
170
|
+
DATA_PTR(self) = create_seq(seq_flags, sizeof(CvSeq), storage_value);
|
|
171
|
+
|
|
139
172
|
return self;
|
|
140
173
|
}
|
|
141
174
|
|
|
@@ -174,17 +207,22 @@ rb_aref(VALUE self, VALUE index)
|
|
|
174
207
|
{
|
|
175
208
|
CvSeq *seq = CVSEQ(self);
|
|
176
209
|
int idx = NUM2INT(index);
|
|
177
|
-
if (seq->total == 0)
|
|
210
|
+
if (seq->total == 0) {
|
|
178
211
|
return Qnil;
|
|
179
|
-
|
|
212
|
+
}
|
|
213
|
+
if (idx >= seq->total) {
|
|
180
214
|
rb_raise(rb_eIndexError, "index %d out of sequence", idx);
|
|
215
|
+
}
|
|
181
216
|
|
|
182
217
|
VALUE result = Qnil;
|
|
183
218
|
try {
|
|
184
|
-
|
|
219
|
+
VALUE klass = seqblock_class(seq);
|
|
220
|
+
if (RTEST(rb_class_inherited_p(klass, rb_cInteger))) {
|
|
185
221
|
result = INT2NUM(*CV_GET_SEQ_ELEM(int, seq, idx));
|
|
186
|
-
|
|
187
|
-
|
|
222
|
+
}
|
|
223
|
+
else {
|
|
224
|
+
result = REFER_OBJECT(klass, cvGetSeqElem(seq, idx), self);
|
|
225
|
+
}
|
|
188
226
|
}
|
|
189
227
|
catch (cv::Exception& e) {
|
|
190
228
|
raise_cverror(e);
|
|
@@ -288,16 +326,20 @@ VALUE
|
|
|
288
326
|
rb_seq_push(VALUE self, VALUE args, int flag)
|
|
289
327
|
{
|
|
290
328
|
CvSeq *seq = CVSEQ(self);
|
|
291
|
-
VALUE klass = seqblock_class(seq)
|
|
329
|
+
VALUE klass = seqblock_class(seq);
|
|
292
330
|
volatile void *elem = NULL;
|
|
293
331
|
int len = RARRAY_LEN(args);
|
|
294
|
-
for (int i = 0; i < len; ++
|
|
295
|
-
object = RARRAY_PTR(args)[i];
|
|
296
|
-
if (
|
|
297
|
-
if (
|
|
298
|
-
volatile int int_elem =
|
|
332
|
+
for (int i = 0; i < len; i++) {
|
|
333
|
+
VALUE object = RARRAY_PTR(args)[i];
|
|
334
|
+
if (rb_obj_is_kind_of(object, klass)) {
|
|
335
|
+
if (rb_obj_is_kind_of(object, rb_cInteger)) {
|
|
336
|
+
volatile int int_elem = NUM2INT(object);
|
|
299
337
|
elem = &int_elem;
|
|
300
338
|
}
|
|
339
|
+
else if (rb_obj_is_kind_of(object, rb_cNumeric)) {
|
|
340
|
+
volatile double double_elem = NUM2DBL(object);
|
|
341
|
+
elem = &double_elem;
|
|
342
|
+
}
|
|
301
343
|
else {
|
|
302
344
|
elem = (void*)DATA_PTR(object);
|
|
303
345
|
}
|
|
@@ -311,7 +353,8 @@ rb_seq_push(VALUE self, VALUE args, int flag)
|
|
|
311
353
|
raise_cverror(e);
|
|
312
354
|
}
|
|
313
355
|
}
|
|
314
|
-
else if (rb_obj_is_kind_of(object, rb_klass)
|
|
356
|
+
else if ((rb_obj_is_kind_of(object, rb_klass) == Qtrue) &&
|
|
357
|
+
RTEST(rb_class_inherited_p(seqblock_class(CVSEQ(object)), klass))) { // object is CvSeq
|
|
315
358
|
void *buffer = NULL;
|
|
316
359
|
try {
|
|
317
360
|
buffer = cvCvtSeqToArray(CVSEQ(object), rb_cvAlloc(CVSEQ(object)->total * CVSEQ(object)->elem_size));
|
data/ext/opencv/cvseq.h
CHANGED
|
@@ -24,6 +24,7 @@ void init_ruby_class();
|
|
|
24
24
|
VALUE seqblock_class(void *ptr);
|
|
25
25
|
void register_elem_class(CvSeq *seq, VALUE klass);
|
|
26
26
|
void unregister_elem_class(void *ptr);
|
|
27
|
+
CvSeq* create_seq(int seq_flags, size_t header_size, VALUE storage_value);
|
|
27
28
|
|
|
28
29
|
VALUE rb_allocate(VALUE klass);
|
|
29
30
|
|
data/ext/opencv/opencv.cpp
CHANGED
|
@@ -388,6 +388,47 @@ init_ruby_module()
|
|
|
388
388
|
rb_define_const(rb_module, "COLORMAP_PINK", INT2FIX(cv::COLORMAP_PINK));
|
|
389
389
|
rb_define_const(rb_module, "COLORMAP_HOT", INT2FIX(cv::COLORMAP_HOT));
|
|
390
390
|
|
|
391
|
+
/* Sequence types */
|
|
392
|
+
rb_define_const(rb_module, "CV_SEQ_ELTYPE_BITS", INT2FIX(CV_SEQ_ELTYPE_BITS));
|
|
393
|
+
rb_define_const(rb_module, "CV_SEQ_ELTYPE_MASK", INT2FIX(CV_SEQ_ELTYPE_MASK));
|
|
394
|
+
rb_define_const(rb_module, "CV_SEQ_ELTYPE_POINT", INT2FIX(CV_SEQ_ELTYPE_POINT));
|
|
395
|
+
rb_define_const(rb_module, "CV_SEQ_ELTYPE_CODE", INT2FIX(CV_SEQ_ELTYPE_CODE));
|
|
396
|
+
rb_define_const(rb_module, "CV_SEQ_ELTYPE_GENERIC", INT2FIX(CV_SEQ_ELTYPE_GENERIC));
|
|
397
|
+
rb_define_const(rb_module, "CV_SEQ_ELTYPE_PTR", INT2FIX(CV_SEQ_ELTYPE_PTR));
|
|
398
|
+
rb_define_const(rb_module, "CV_SEQ_ELTYPE_PPOINT", INT2FIX(CV_SEQ_ELTYPE_PPOINT));
|
|
399
|
+
rb_define_const(rb_module, "CV_SEQ_ELTYPE_INDEX", INT2FIX(CV_SEQ_ELTYPE_INDEX));
|
|
400
|
+
rb_define_const(rb_module, "CV_SEQ_ELTYPE_GRAPH_EDGE", INT2FIX(CV_SEQ_ELTYPE_GRAPH_EDGE));
|
|
401
|
+
rb_define_const(rb_module, "CV_SEQ_ELTYPE_GRAPH_VERTEX", INT2FIX(CV_SEQ_ELTYPE_GRAPH_VERTEX));
|
|
402
|
+
rb_define_const(rb_module, "CV_SEQ_ELTYPE_TRIAN_ATR", INT2FIX(CV_SEQ_ELTYPE_TRIAN_ATR));
|
|
403
|
+
rb_define_const(rb_module, "CV_SEQ_ELTYPE_CONNECTED_COMP", INT2FIX(CV_SEQ_ELTYPE_CONNECTED_COMP));
|
|
404
|
+
rb_define_const(rb_module, "CV_SEQ_ELTYPE_POINT3D", INT2FIX(CV_SEQ_ELTYPE_POINT3D));
|
|
405
|
+
rb_define_const(rb_module, "CV_SEQ_KIND_BITS", INT2FIX(CV_SEQ_KIND_BITS));
|
|
406
|
+
rb_define_const(rb_module, "CV_SEQ_KIND_MASK", INT2FIX(CV_SEQ_KIND_MASK));
|
|
407
|
+
rb_define_const(rb_module, "CV_SEQ_KIND_GENERIC", INT2FIX(CV_SEQ_KIND_GENERIC));
|
|
408
|
+
rb_define_const(rb_module, "CV_SEQ_KIND_CURVE", INT2FIX(CV_SEQ_KIND_CURVE));
|
|
409
|
+
rb_define_const(rb_module, "CV_SEQ_KIND_BIN_TREE", INT2FIX(CV_SEQ_KIND_BIN_TREE));
|
|
410
|
+
rb_define_const(rb_module, "CV_SEQ_KIND_GRAPH", INT2FIX(CV_SEQ_KIND_GRAPH));
|
|
411
|
+
rb_define_const(rb_module, "CV_SEQ_KIND_SUBDIV2D", INT2FIX(CV_SEQ_KIND_SUBDIV2D));
|
|
412
|
+
rb_define_const(rb_module, "CV_SEQ_FLAG_SHIFT", INT2FIX(CV_SEQ_FLAG_SHIFT));
|
|
413
|
+
rb_define_const(rb_module, "CV_SEQ_FLAG_CLOSED", INT2FIX(CV_SEQ_FLAG_CLOSED));
|
|
414
|
+
rb_define_const(rb_module, "CV_SEQ_FLAG_SIMPLE", INT2FIX(CV_SEQ_FLAG_SIMPLE));
|
|
415
|
+
rb_define_const(rb_module, "CV_SEQ_FLAG_CONVEX", INT2FIX(CV_SEQ_FLAG_CONVEX));
|
|
416
|
+
rb_define_const(rb_module, "CV_SEQ_FLAG_HOLE", INT2FIX(CV_SEQ_FLAG_HOLE));
|
|
417
|
+
rb_define_const(rb_module, "CV_GRAPH_FLAG_ORIENTED", INT2FIX(CV_GRAPH_FLAG_ORIENTED));
|
|
418
|
+
rb_define_const(rb_module, "CV_GRAPH", INT2FIX(CV_GRAPH));
|
|
419
|
+
rb_define_const(rb_module, "CV_ORIENTED_GRAPH", INT2FIX(CV_ORIENTED_GRAPH));
|
|
420
|
+
rb_define_const(rb_module, "CV_SEQ_POINT_SET", INT2FIX(CV_SEQ_POINT_SET));
|
|
421
|
+
rb_define_const(rb_module, "CV_SEQ_POINT3D_SET", INT2FIX(CV_SEQ_POINT3D_SET));
|
|
422
|
+
rb_define_const(rb_module, "CV_SEQ_POLYLINE", INT2FIX(CV_SEQ_POLYLINE));
|
|
423
|
+
rb_define_const(rb_module, "CV_SEQ_POLYGON", INT2FIX(CV_SEQ_POLYGON));
|
|
424
|
+
rb_define_const(rb_module, "CV_SEQ_CONTOUR", INT2FIX(CV_SEQ_CONTOUR));
|
|
425
|
+
rb_define_const(rb_module, "CV_SEQ_SIMPLE_POLYGON", INT2FIX(CV_SEQ_SIMPLE_POLYGON));
|
|
426
|
+
rb_define_const(rb_module, "CV_SEQ_CHAIN", INT2FIX(CV_SEQ_CHAIN));
|
|
427
|
+
rb_define_const(rb_module, "CV_SEQ_CHAIN_CONTOUR", INT2FIX(CV_SEQ_CHAIN_CONTOUR));
|
|
428
|
+
rb_define_const(rb_module, "CV_SEQ_POLYGON_TREE", INT2FIX(CV_SEQ_POLYGON_TREE));
|
|
429
|
+
rb_define_const(rb_module, "CV_SEQ_CONNECTED_COMP", INT2FIX(CV_SEQ_CONNECTED_COMP));
|
|
430
|
+
rb_define_const(rb_module, "CV_SEQ_INDEX", INT2FIX(CV_SEQ_INDEX));
|
|
431
|
+
|
|
391
432
|
VALUE inversion_method = rb_hash_new();
|
|
392
433
|
/* {:lu, :svd, :svd_sym(:svd_symmetric)}: Inversion method */
|
|
393
434
|
rb_define_const(rb_module, "INVERSION_METHOD", inversion_method);
|
data/lib/opencv/version.rb
CHANGED
data/ruby-opencv.gemspec
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
|
2
|
-
# stub: ruby-opencv 0.0.
|
|
2
|
+
# stub: ruby-opencv 0.0.14.pre.20150125030210 ruby lib
|
|
3
3
|
# stub: ext/opencv/extconf.rb
|
|
4
4
|
|
|
5
5
|
Gem::Specification.new do |s|
|
|
6
6
|
s.name = "ruby-opencv"
|
|
7
|
-
s.version = "0.0.
|
|
7
|
+
s.version = "0.0.14.pre.20150125030210"
|
|
8
8
|
|
|
9
|
-
s.required_rubygems_version = Gem::Requirement.new("
|
|
9
|
+
s.required_rubygems_version = Gem::Requirement.new("> 1.3.1") if s.respond_to? :required_rubygems_version=
|
|
10
10
|
s.require_paths = ["lib"]
|
|
11
11
|
s.authors = ["lsxi", "ser1zw", "pcting"]
|
|
12
|
-
s.date = "
|
|
12
|
+
s.date = "2015-01-24"
|
|
13
13
|
s.description = "ruby-opencv is a wrapper of OpenCV for Ruby. It helps you to write computer vision programs (e.g. detecting faces from pictures) with Ruby."
|
|
14
14
|
s.email = ["masakazu.yonekura@gmail.com", "azariahsawtikes@gmail.com", "pcting@gmail.com"]
|
|
15
15
|
s.extensions = ["ext/opencv/extconf.rb"]
|
|
@@ -18,9 +18,9 @@ Gem::Specification.new do |s|
|
|
|
18
18
|
s.homepage = "https://github.com/ruby-opencv/ruby-opencv/"
|
|
19
19
|
s.licenses = ["The BSD License"]
|
|
20
20
|
s.rdoc_options = ["--main", "README.md"]
|
|
21
|
-
s.rubygems_version = "2.
|
|
21
|
+
s.rubygems_version = "2.4.5"
|
|
22
22
|
s.summary = "OpenCV wrapper for Ruby"
|
|
23
|
-
s.test_files = ["test/
|
|
23
|
+
s.test_files = ["test/test_trackbar.rb", "test/test_cvhistogram.rb", "test/test_cvpoint.rb", "test/test_cvmat_dxt.rb", "test/test_iplconvkernel.rb", "test/test_cvconnectedcomp.rb", "test/test_curve.rb", "test/test_mouseevent.rb", "test/test_cvsurfpoint.rb", "test/test_eigenfaces.rb", "test/test_cvtwopoints.rb", "test/test_cvbox2d.rb", "test/test_cvmat_imageprocessing.rb", "test/test_cvtermcriteria.rb", "test/test_fisherfaces.rb", "test/test_cvvideowriter.rb", "test/test_cvmoments.rb", "test/test_cvsize2d32f.rb", "test/test_cvsize.rb", "test/test_cvcircle32f.rb", "test/test_cvavgcomp.rb", "test/test_cvscalar.rb", "test/test_cvhaarclassifiercascade.rb", "test/test_cvrect.rb", "test/test_cvfont.rb", "test/test_cvmat_drawing.rb", "test/test_cvhumoments.rb", "test/test_cvmat.rb", "test/test_cvcapture.rb", "test/test_pointset.rb", "test/test_cvcontour.rb", "test/test_opencv.rb", "test/test_cvline.rb", "test/test_lbph.rb", "test/test_iplimage.rb", "test/test_cvcontourtree.rb", "test/test_window.rb", "test/test_cvpoint3d32f.rb", "test/test_cvseq.rb", "test/test_preliminary.rb", "test/test_cvsurfparams.rb", "test/test_cvchain.rb", "test/test_cvfeaturetree.rb", "test/test_cvpoint2d32f.rb", "test/test_cverror.rb", "test/test_cvslice.rb"]
|
|
24
24
|
|
|
25
25
|
if s.respond_to? :specification_version then
|
|
26
26
|
s.specification_version = 4
|
|
@@ -29,17 +29,17 @@ Gem::Specification.new do |s|
|
|
|
29
29
|
s.add_development_dependency(%q<rdoc>, ["~> 4.0"])
|
|
30
30
|
s.add_development_dependency(%q<rake-compiler>, ["~> 0"])
|
|
31
31
|
s.add_development_dependency(%q<hoe-gemspec>, ["~> 0"])
|
|
32
|
-
s.add_development_dependency(%q<hoe>, ["~> 3.
|
|
32
|
+
s.add_development_dependency(%q<hoe>, ["~> 3.13"])
|
|
33
33
|
else
|
|
34
34
|
s.add_dependency(%q<rdoc>, ["~> 4.0"])
|
|
35
35
|
s.add_dependency(%q<rake-compiler>, ["~> 0"])
|
|
36
36
|
s.add_dependency(%q<hoe-gemspec>, ["~> 0"])
|
|
37
|
-
s.add_dependency(%q<hoe>, ["~> 3.
|
|
37
|
+
s.add_dependency(%q<hoe>, ["~> 3.13"])
|
|
38
38
|
end
|
|
39
39
|
else
|
|
40
40
|
s.add_dependency(%q<rdoc>, ["~> 4.0"])
|
|
41
41
|
s.add_dependency(%q<rake-compiler>, ["~> 0"])
|
|
42
42
|
s.add_dependency(%q<hoe-gemspec>, ["~> 0"])
|
|
43
|
-
s.add_dependency(%q<hoe>, ["~> 3.
|
|
43
|
+
s.add_dependency(%q<hoe>, ["~> 3.13"])
|
|
44
44
|
end
|
|
45
45
|
end
|
|
@@ -10,7 +10,7 @@ include OpenCV
|
|
|
10
10
|
class TestCvConnectedComp < OpenCVTestCase
|
|
11
11
|
def setup
|
|
12
12
|
@connected_comp = CvConnectedComp.new(9216, CvScalar.new(1, 2, 3, 4),
|
|
13
|
-
CvRect.new(1, 2, 3, 4), CvSeq.new(
|
|
13
|
+
CvRect.new(1, 2, 3, 4), CvSeq.new(CV_SEQ_ELTYPE_INDEX))
|
|
14
14
|
end
|
|
15
15
|
|
|
16
16
|
def test_initialize
|
|
@@ -22,7 +22,7 @@ class TestCvConnectedComp < OpenCVTestCase
|
|
|
22
22
|
assert_not_nil(connected_comp.contour)
|
|
23
23
|
|
|
24
24
|
connected_comp = CvConnectedComp.new(100, CvScalar.new(1, 2, 3, 4),
|
|
25
|
-
CvRect.new(1, 2, 3, 4), CvSeq.new(
|
|
25
|
+
CvRect.new(1, 2, 3, 4), CvSeq.new(CV_SEQ_ELTYPE_POINT))
|
|
26
26
|
assert_equal(CvConnectedComp, connected_comp.class)
|
|
27
27
|
assert_not_nil(connected_comp.area)
|
|
28
28
|
assert_not_nil(connected_comp.value)
|
data/test/test_cvcontourtree.rb
CHANGED
|
@@ -9,11 +9,11 @@ include OpenCV
|
|
|
9
9
|
# Tests for OpenCV::CvContourTree
|
|
10
10
|
class TestCvContourTree < OpenCVTestCase
|
|
11
11
|
def setup
|
|
12
|
-
@tree = CvContourTree.new(
|
|
12
|
+
@tree = CvContourTree.new(CV_SEQ_ELTYPE_POINT)
|
|
13
13
|
end
|
|
14
14
|
|
|
15
15
|
def test_initialize
|
|
16
|
-
tree = CvContourTree.new(
|
|
16
|
+
tree = CvContourTree.new(CV_SEQ_ELTYPE_POINT)
|
|
17
17
|
assert_equal(CvContourTree, tree.class)
|
|
18
18
|
assert(tree.is_a? CvSeq)
|
|
19
19
|
end
|
data/test/test_cvhistogram.rb
CHANGED
data/test/test_cvmat.rb
CHANGED
|
@@ -2161,6 +2161,39 @@ class TestCvMat < OpenCVTestCase
|
|
|
2161
2161
|
}
|
|
2162
2162
|
end
|
|
2163
2163
|
|
|
2164
|
+
def test_norm
|
|
2165
|
+
src1 = CvMat.new(3, 3, :cv32f, 1).set_data([1, 2, 3, 4, 5, 6, 7, 8, 9])
|
|
2166
|
+
src2 = CvMat.new(3, 3, :cv32f, 1).set_data([2, 3, 4, 5, 6, 7, 8, 9, 1])
|
|
2167
|
+
mask = CvMat.new(3, 3, :cv8u, 1).set_data([1, 1, 0, 1, 1, 0, 0, 0, 0])
|
|
2168
|
+
|
|
2169
|
+
assert_in_delta(CvMat.norm(src1), 16.88, 0.01)
|
|
2170
|
+
|
|
2171
|
+
assert_in_delta(CvMat.norm(src1, nil, CV_NORM_L1), 45.0, 0.01)
|
|
2172
|
+
assert_in_delta(CvMat.norm(src1, nil, CV_NORM_L2), 16.88, 0.01)
|
|
2173
|
+
assert_in_delta(CvMat.norm(src1, nil, CV_NORM_INF), 9.0, 0.01)
|
|
2174
|
+
|
|
2175
|
+
assert_in_delta(CvMat.norm(src1, src2, CV_NORM_L1), 16.0, 0.01)
|
|
2176
|
+
assert_in_delta(CvMat.norm(src1, src2, CV_NORM_L2), 8.49, 0.01)
|
|
2177
|
+
assert_in_delta(CvMat.norm(src1, src2, CV_NORM_INF), 8.0, 0.01)
|
|
2178
|
+
|
|
2179
|
+
assert_in_delta(CvMat.norm(src1, src2, CV_NORM_L1, mask), 4.0, 0.01)
|
|
2180
|
+
assert_in_delta(CvMat.norm(src1, src2, CV_NORM_L2, mask), 2.0, 0.01)
|
|
2181
|
+
assert_in_delta(CvMat.norm(src1, src2, CV_NORM_INF, mask), 1.0, 0.01)
|
|
2182
|
+
|
|
2183
|
+
assert_raise(TypeError) {
|
|
2184
|
+
CvMat.norm(DUMMY_OBJ)
|
|
2185
|
+
}
|
|
2186
|
+
assert_raise(TypeError) {
|
|
2187
|
+
CvMat.norm(src1, DUMMY_OBJ)
|
|
2188
|
+
}
|
|
2189
|
+
assert_raise(TypeError) {
|
|
2190
|
+
CvMat.norm(src1, src2, DUMMY_OBJ)
|
|
2191
|
+
}
|
|
2192
|
+
assert_raise(TypeError) {
|
|
2193
|
+
CvMat.norm(src1, src2, CV_NORM_L1, DUMMY_OBJ)
|
|
2194
|
+
}
|
|
2195
|
+
end
|
|
2196
|
+
|
|
2164
2197
|
def test_dot_product
|
|
2165
2198
|
m1 = create_cvmat(2, 2, :cv32f, 1) { |j, i, c|
|
|
2166
2199
|
CvScalar.new(c * 0.5)
|
data/test/test_cvseq.rb
CHANGED
|
@@ -9,17 +9,34 @@ include OpenCV
|
|
|
9
9
|
# Tests for OpenCV::CvSeq
|
|
10
10
|
class TestCvSeq < OpenCVTestCase
|
|
11
11
|
def test_initialize
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
12
|
+
types = [CV_SEQ_ELTYPE_POINT, CV_SEQ_ELTYPE_POINT3D, CV_SEQ_ELTYPE_CODE, CV_SEQ_ELTYPE_INDEX]
|
|
13
|
+
kinds = [CV_SEQ_KIND_GENERIC, CV_SEQ_KIND_CURVE, CV_SEQ_KIND_BIN_TREE, CV_SEQ_KIND_GRAPH, CV_SEQ_KIND_SUBDIV2D]
|
|
14
|
+
flags = [CV_SEQ_FLAG_CLOSED, CV_SEQ_FLAG_SIMPLE, CV_SEQ_FLAG_CONVEX, CV_SEQ_FLAG_HOLE]
|
|
15
|
+
types.each { |type|
|
|
16
|
+
kinds.each { |kind|
|
|
17
|
+
flags.each { |flag|
|
|
18
|
+
seq_flag = type | kind | flag
|
|
19
|
+
assert_equal(CvSeq, CvSeq.new(seq_flag).class)
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
[CV_SEQ_POINT_SET, CV_SEQ_POINT3D_SET, CV_SEQ_POLYLINE, CV_SEQ_POLYGON,
|
|
25
|
+
CV_SEQ_CONTOUR, CV_SEQ_SIMPLE_POLYGON, CV_SEQ_CHAIN, CV_SEQ_CHAIN_CONTOUR,
|
|
26
|
+
CV_SEQ_INDEX ].each { |seq_flag|
|
|
27
|
+
assert_equal(CvSeq, CvSeq.new(seq_flag).class)
|
|
28
|
+
}
|
|
17
29
|
|
|
18
|
-
|
|
30
|
+
# Unsupported types
|
|
31
|
+
[CV_SEQ_ELTYPE_PTR, CV_SEQ_ELTYPE_PPOINT].each { |type|
|
|
32
|
+
assert_raise(ArgumentError) {
|
|
33
|
+
CvSeq.new(type)
|
|
34
|
+
}
|
|
35
|
+
}
|
|
19
36
|
end
|
|
20
37
|
|
|
21
38
|
def test_total
|
|
22
|
-
seq1 = CvSeq.new(
|
|
39
|
+
seq1 = CvSeq.new(CV_SEQ_ELTYPE_POINT)
|
|
23
40
|
assert_equal(0, seq1.total)
|
|
24
41
|
|
|
25
42
|
seq1.push(CvPoint.new(1, 2))
|
|
@@ -33,13 +50,12 @@ class TestCvSeq < OpenCVTestCase
|
|
|
33
50
|
end
|
|
34
51
|
|
|
35
52
|
def test_empty
|
|
36
|
-
assert(CvSeq.new(
|
|
37
|
-
assert(CvSeq.new(CvPoint2D32f).empty?)
|
|
38
|
-
assert(CvSeq.new(CvPoint3D32f).empty?)
|
|
53
|
+
assert(CvSeq.new(CV_SEQ_ELTYPE_POINT).empty?)
|
|
39
54
|
end
|
|
40
55
|
|
|
41
56
|
def test_aref
|
|
42
|
-
seq1 = CvSeq.new(
|
|
57
|
+
seq1 = CvSeq.new(CV_SEQ_ELTYPE_POINT)
|
|
58
|
+
seq1.push(CvPoint.new(10, 20), CvPoint.new(30, 40), CvPoint.new(50, 60))
|
|
43
59
|
|
|
44
60
|
assert_equal(CvPoint, seq1[0].class)
|
|
45
61
|
assert_equal(10, seq1[0].x)
|
|
@@ -49,8 +65,8 @@ class TestCvSeq < OpenCVTestCase
|
|
|
49
65
|
assert_equal(50, seq1[2].x)
|
|
50
66
|
assert_equal(60, seq1[2].y)
|
|
51
67
|
|
|
52
|
-
seq2 = CvSeq.new(
|
|
53
|
-
|
|
68
|
+
seq2 = CvSeq.new(CV_SEQ_ELTYPE_INDEX)
|
|
69
|
+
seq2.push(10, 20, 30)
|
|
54
70
|
assert_equal(Fixnum, seq2[0].class)
|
|
55
71
|
assert_equal(10, seq2[0])
|
|
56
72
|
assert_equal(20, seq2[1])
|
|
@@ -58,7 +74,7 @@ class TestCvSeq < OpenCVTestCase
|
|
|
58
74
|
end
|
|
59
75
|
|
|
60
76
|
def test_push
|
|
61
|
-
seq1 = CvSeq.new(
|
|
77
|
+
seq1 = CvSeq.new(CV_SEQ_ELTYPE_POINT).push(CvPoint.new(10, 20), CvPoint.new(30, 40))
|
|
62
78
|
|
|
63
79
|
assert_equal(2, seq1.total)
|
|
64
80
|
assert_equal(CvPoint, seq1[0].class)
|
|
@@ -68,7 +84,7 @@ class TestCvSeq < OpenCVTestCase
|
|
|
68
84
|
assert_equal(30, seq1[1].x)
|
|
69
85
|
assert_equal(40, seq1[1].y)
|
|
70
86
|
|
|
71
|
-
seq2 = CvSeq.new(
|
|
87
|
+
seq2 = CvSeq.new(CV_SEQ_ELTYPE_POINT).push(CvPoint.new(50, 60))
|
|
72
88
|
seq2.push(seq1)
|
|
73
89
|
assert_equal(3, seq2.total)
|
|
74
90
|
assert_equal(CvPoint, seq2[0].class)
|
|
@@ -81,8 +97,8 @@ class TestCvSeq < OpenCVTestCase
|
|
|
81
97
|
assert_equal(30, seq2[2].x)
|
|
82
98
|
assert_equal(40, seq2[2].y)
|
|
83
99
|
|
|
84
|
-
seq3 = CvSeq.new(
|
|
85
|
-
seq4 = CvSeq.new(
|
|
100
|
+
seq3 = CvSeq.new(CV_SEQ_ELTYPE_INDEX).push(10)
|
|
101
|
+
seq4 = CvSeq.new(CV_SEQ_ELTYPE_INDEX).push(20, 30)
|
|
86
102
|
seq3.push(seq4)
|
|
87
103
|
assert_equal(3, seq3.total)
|
|
88
104
|
assert_equal(Fixnum, seq3[0].class)
|
|
@@ -91,17 +107,17 @@ class TestCvSeq < OpenCVTestCase
|
|
|
91
107
|
assert_equal(30, seq3[2])
|
|
92
108
|
|
|
93
109
|
assert_raise(TypeError) {
|
|
94
|
-
seq1.push(
|
|
110
|
+
seq1.push(55.5, 66.6)
|
|
95
111
|
}
|
|
96
112
|
|
|
97
113
|
assert_raise(TypeError) {
|
|
98
|
-
seq3 = CvSeq.new(
|
|
114
|
+
seq3 = CvSeq.new(CV_SEQ_ELTYPE_INDEX).push(55, 66)
|
|
99
115
|
seq1.push(seq3)
|
|
100
116
|
}
|
|
101
117
|
end
|
|
102
118
|
|
|
103
119
|
def test_pop
|
|
104
|
-
seq1 = CvSeq.new(
|
|
120
|
+
seq1 = CvSeq.new(CV_SEQ_ELTYPE_POINT).push(CvPoint.new(10, 20), CvPoint.new(30, 40))
|
|
105
121
|
point1 = seq1.pop
|
|
106
122
|
assert_equal(CvPoint, point1.class)
|
|
107
123
|
assert_equal(30, point1.x)
|
|
@@ -112,23 +128,23 @@ class TestCvSeq < OpenCVTestCase
|
|
|
112
128
|
assert_equal(10, seq1[0].x)
|
|
113
129
|
assert_equal(20, seq1[0].y)
|
|
114
130
|
|
|
115
|
-
assert_nil(CvSeq.new(
|
|
131
|
+
assert_nil(CvSeq.new(CV_SEQ_ELTYPE_POINT).pop)
|
|
116
132
|
|
|
117
|
-
seq2 = CvSeq.new(
|
|
133
|
+
seq2 = CvSeq.new(CV_SEQ_ELTYPE_INDEX).push(10, 20, 30)
|
|
118
134
|
assert_equal(30, seq2.pop)
|
|
119
135
|
assert_equal(20, seq2.pop)
|
|
120
136
|
assert_equal(10, seq2.pop)
|
|
121
137
|
end
|
|
122
138
|
|
|
123
139
|
def test_clear
|
|
124
|
-
seq1 = CvSeq.new(
|
|
140
|
+
seq1 = CvSeq.new(CV_SEQ_ELTYPE_POINT).push(CvPoint.new(10, 20), CvPoint.new(30, 40))
|
|
125
141
|
seq1.clear
|
|
126
142
|
assert_not_nil(seq1)
|
|
127
143
|
assert_equal(0, seq1.total)
|
|
128
144
|
end
|
|
129
145
|
|
|
130
146
|
def test_unshift
|
|
131
|
-
seq1 = CvSeq.new(
|
|
147
|
+
seq1 = CvSeq.new(CV_SEQ_ELTYPE_POINT).unshift(CvPoint.new(10, 20), CvPoint.new(30, 40))
|
|
132
148
|
|
|
133
149
|
assert_equal(2, seq1.total)
|
|
134
150
|
assert_equal(CvPoint, seq1[0].class)
|
|
@@ -138,7 +154,7 @@ class TestCvSeq < OpenCVTestCase
|
|
|
138
154
|
assert_equal(10, seq1[1].x)
|
|
139
155
|
assert_equal(20, seq1[1].y)
|
|
140
156
|
|
|
141
|
-
seq2 = CvSeq.new(
|
|
157
|
+
seq2 = CvSeq.new(CV_SEQ_ELTYPE_POINT).unshift(CvPoint.new(50, 60))
|
|
142
158
|
seq2.unshift(seq1)
|
|
143
159
|
assert_equal(3, seq2.total)
|
|
144
160
|
assert_equal(CvPoint, seq1[0].class)
|
|
@@ -151,24 +167,24 @@ class TestCvSeq < OpenCVTestCase
|
|
|
151
167
|
assert_equal(50, seq2[2].x)
|
|
152
168
|
assert_equal(60, seq2[2].y)
|
|
153
169
|
|
|
154
|
-
seq3 = CvSeq.new(
|
|
170
|
+
seq3 = CvSeq.new(CV_SEQ_ELTYPE_INDEX).unshift(10, 20, 30)
|
|
155
171
|
assert_equal(3, seq3.total)
|
|
156
172
|
assert_equal(30, seq3[0])
|
|
157
173
|
assert_equal(20, seq3[1])
|
|
158
174
|
assert_equal(10, seq3[2])
|
|
159
175
|
|
|
160
176
|
assert_raise(TypeError) {
|
|
161
|
-
seq1.unshift(
|
|
177
|
+
seq1.unshift(10)
|
|
162
178
|
}
|
|
163
179
|
|
|
164
180
|
assert_raise(TypeError) {
|
|
165
|
-
seq3 = CvSeq.new(
|
|
181
|
+
seq3 = CvSeq.new(CV_SEQ_ELTYPE_INDEX).push(10, 20, 30)
|
|
166
182
|
seq1.unshift(seq3)
|
|
167
183
|
}
|
|
168
184
|
end
|
|
169
185
|
|
|
170
186
|
def test_shift
|
|
171
|
-
seq1 = CvSeq.new(
|
|
187
|
+
seq1 = CvSeq.new(CV_SEQ_ELTYPE_POINT).push(CvPoint.new(10, 20), CvPoint.new(30, 40))
|
|
172
188
|
point1 = seq1.shift
|
|
173
189
|
assert_equal(CvPoint, point1.class)
|
|
174
190
|
assert_equal(10, point1.x)
|
|
@@ -179,38 +195,38 @@ class TestCvSeq < OpenCVTestCase
|
|
|
179
195
|
assert_equal(30, seq1[0].x)
|
|
180
196
|
assert_equal(40, seq1[0].y)
|
|
181
197
|
|
|
182
|
-
seq2 = CvSeq.new(
|
|
198
|
+
seq2 = CvSeq.new(CV_SEQ_ELTYPE_INDEX).push(10, 20, 30)
|
|
183
199
|
assert_equal(10, seq2.shift)
|
|
184
200
|
assert_equal(20, seq2.shift)
|
|
185
201
|
assert_equal(30, seq2.shift)
|
|
186
202
|
|
|
187
|
-
assert_nil(CvSeq.new(
|
|
203
|
+
assert_nil(CvSeq.new(CV_SEQ_ELTYPE_POINT).shift)
|
|
188
204
|
end
|
|
189
205
|
|
|
190
206
|
def test_first
|
|
191
|
-
seq1 = CvSeq.new(
|
|
207
|
+
seq1 = CvSeq.new(CV_SEQ_ELTYPE_POINT).push(CvPoint.new(10, 20), CvPoint.new(30, 40), CvPoint.new(50, 60))
|
|
192
208
|
point1 = seq1.first
|
|
193
209
|
assert_equal(CvPoint, point1.class)
|
|
194
210
|
assert_equal(10, point1.x)
|
|
195
211
|
assert_equal(20, point1.y)
|
|
196
212
|
|
|
197
|
-
seq2 = CvSeq.new(
|
|
213
|
+
seq2 = CvSeq.new(CV_SEQ_ELTYPE_INDEX).push(10, 20, 30)
|
|
198
214
|
assert_equal(10, seq2.first)
|
|
199
215
|
end
|
|
200
216
|
|
|
201
217
|
def test_last
|
|
202
|
-
seq1 = CvSeq.new(
|
|
218
|
+
seq1 = CvSeq.new(CV_SEQ_ELTYPE_POINT).push(CvPoint.new(10, 20), CvPoint.new(30, 40), CvPoint.new(50, 60))
|
|
203
219
|
point1 = seq1.last
|
|
204
220
|
assert_equal(CvPoint, point1.class)
|
|
205
221
|
assert_equal(50, point1.x)
|
|
206
222
|
assert_equal(60, point1.y)
|
|
207
223
|
|
|
208
|
-
seq2 = CvSeq.new(
|
|
224
|
+
seq2 = CvSeq.new(CV_SEQ_ELTYPE_INDEX).push(10, 20, 30)
|
|
209
225
|
assert_equal(30, seq2.last)
|
|
210
226
|
end
|
|
211
227
|
|
|
212
228
|
def test_each
|
|
213
|
-
seq1 = CvSeq.new(
|
|
229
|
+
seq1 = CvSeq.new(CV_SEQ_ELTYPE_POINT).push(CvPoint.new(10, 20), CvPoint.new(30, 40), CvPoint.new(50, 60))
|
|
214
230
|
i = 0
|
|
215
231
|
seq1.each { |s|
|
|
216
232
|
assert_equal(CvPoint, s.class)
|
|
@@ -220,7 +236,7 @@ class TestCvSeq < OpenCVTestCase
|
|
|
220
236
|
}
|
|
221
237
|
assert_equal(3, i)
|
|
222
238
|
|
|
223
|
-
seq2 = CvSeq.new(
|
|
239
|
+
seq2 = CvSeq.new(CV_SEQ_ELTYPE_INDEX).push(10, 20, 30)
|
|
224
240
|
i = 0
|
|
225
241
|
seq2.each { |s|
|
|
226
242
|
assert_equal(seq2[i], s)
|
|
@@ -230,7 +246,7 @@ class TestCvSeq < OpenCVTestCase
|
|
|
230
246
|
end
|
|
231
247
|
|
|
232
248
|
def test_each_index
|
|
233
|
-
seq1 = CvSeq.new(
|
|
249
|
+
seq1 = CvSeq.new(CV_SEQ_ELTYPE_POINT).push(CvPoint.new(10, 20), CvPoint.new(30, 40), CvPoint.new(50, 60))
|
|
234
250
|
n = 0
|
|
235
251
|
seq1.each_index { |i|
|
|
236
252
|
assert_equal(n, i)
|
|
@@ -240,7 +256,7 @@ class TestCvSeq < OpenCVTestCase
|
|
|
240
256
|
end
|
|
241
257
|
|
|
242
258
|
def test_insert
|
|
243
|
-
seq1 = CvSeq.new(
|
|
259
|
+
seq1 = CvSeq.new(CV_SEQ_ELTYPE_POINT).push(CvPoint.new(10, 20), CvPoint.new(30, 40))
|
|
244
260
|
seq1.insert(1, CvPoint.new(50, 60))
|
|
245
261
|
assert_equal(3, seq1.total)
|
|
246
262
|
assert_equal(CvPoint, seq1[0].class)
|
|
@@ -253,7 +269,7 @@ class TestCvSeq < OpenCVTestCase
|
|
|
253
269
|
assert_equal(30, seq1[2].x)
|
|
254
270
|
assert_equal(40, seq1[2].y)
|
|
255
271
|
|
|
256
|
-
seq2 = CvSeq.new(
|
|
272
|
+
seq2 = CvSeq.new(CV_SEQ_ELTYPE_INDEX).push(10, 20)
|
|
257
273
|
seq2.insert(1, 15)
|
|
258
274
|
assert_equal(3, seq2.total)
|
|
259
275
|
assert_equal(10, seq2[0])
|
|
@@ -262,7 +278,7 @@ class TestCvSeq < OpenCVTestCase
|
|
|
262
278
|
end
|
|
263
279
|
|
|
264
280
|
def test_remove
|
|
265
|
-
seq1 = CvSeq.new(
|
|
281
|
+
seq1 = CvSeq.new(CV_SEQ_ELTYPE_POINT).push(CvPoint.new(10, 20), CvPoint.new(30, 40), CvPoint.new(50, 60))
|
|
266
282
|
|
|
267
283
|
seq1.remove(1)
|
|
268
284
|
assert_equal(2, seq1.total)
|
data/test/test_opencv.rb
CHANGED
|
@@ -9,14 +9,14 @@ include OpenCV
|
|
|
9
9
|
class TestOpenCV < OpenCVTestCase
|
|
10
10
|
def test_constants
|
|
11
11
|
# OpenCV version
|
|
12
|
-
assert_equal('2.4.
|
|
12
|
+
assert_equal('2.4.10', CV_VERSION)
|
|
13
13
|
assert_equal(2, CV_MAJOR_VERSION)
|
|
14
14
|
assert_equal(4, CV_MINOR_VERSION)
|
|
15
|
-
assert_equal(
|
|
15
|
+
assert_equal(10, CV_SUBMINOR_VERSION)
|
|
16
16
|
|
|
17
17
|
assert_equal(2, CV_VERSION_EPOCH)
|
|
18
18
|
assert_equal(4, CV_VERSION_MAJOR)
|
|
19
|
-
assert_equal(
|
|
19
|
+
assert_equal(10, CV_VERSION_MINOR)
|
|
20
20
|
assert_equal(0, CV_VERSION_REVISION)
|
|
21
21
|
|
|
22
22
|
# Depths
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: ruby-opencv
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.0.
|
|
4
|
+
version: 0.0.14.pre
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- lsxi
|
|
@@ -10,7 +10,7 @@ authors:
|
|
|
10
10
|
autorequire:
|
|
11
11
|
bindir: bin
|
|
12
12
|
cert_chain: []
|
|
13
|
-
date:
|
|
13
|
+
date: 2015-01-24 00:00:00.000000000 Z
|
|
14
14
|
dependencies:
|
|
15
15
|
- !ruby/object:Gem::Dependency
|
|
16
16
|
name: rdoc
|
|
@@ -60,14 +60,14 @@ dependencies:
|
|
|
60
60
|
requirements:
|
|
61
61
|
- - "~>"
|
|
62
62
|
- !ruby/object:Gem::Version
|
|
63
|
-
version: '3.
|
|
63
|
+
version: '3.13'
|
|
64
64
|
type: :development
|
|
65
65
|
prerelease: false
|
|
66
66
|
version_requirements: !ruby/object:Gem::Requirement
|
|
67
67
|
requirements:
|
|
68
68
|
- - "~>"
|
|
69
69
|
- !ruby/object:Gem::Version
|
|
70
|
-
version: '3.
|
|
70
|
+
version: '3.13'
|
|
71
71
|
description: ruby-opencv is a wrapper of OpenCV for Ruby. It helps you to write computer
|
|
72
72
|
vision programs (e.g. detecting faces from pictures) with Ruby.
|
|
73
73
|
email:
|
|
@@ -341,59 +341,59 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
341
341
|
version: '0'
|
|
342
342
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
343
343
|
requirements:
|
|
344
|
-
- - "
|
|
344
|
+
- - ">"
|
|
345
345
|
- !ruby/object:Gem::Version
|
|
346
|
-
version:
|
|
346
|
+
version: 1.3.1
|
|
347
347
|
requirements: []
|
|
348
348
|
rubyforge_project:
|
|
349
|
-
rubygems_version: 2.
|
|
349
|
+
rubygems_version: 2.4.5
|
|
350
350
|
signing_key:
|
|
351
351
|
specification_version: 4
|
|
352
352
|
summary: OpenCV wrapper for Ruby
|
|
353
353
|
test_files:
|
|
354
|
-
- test/test_cvcontour.rb
|
|
355
|
-
- test/test_eigenfaces.rb
|
|
356
|
-
- test/test_cvmoments.rb
|
|
357
|
-
- test/test_cvseq.rb
|
|
358
|
-
- test/test_cvcontourtree.rb
|
|
359
|
-
- test/test_cvbox2d.rb
|
|
360
|
-
- test/test_iplimage.rb
|
|
361
|
-
- test/test_cvvideowriter.rb
|
|
362
|
-
- test/test_cvline.rb
|
|
363
|
-
- test/test_cvhumoments.rb
|
|
364
|
-
- test/test_cvfont.rb
|
|
365
|
-
- test/test_cvconnectedcomp.rb
|
|
366
|
-
- test/test_cvhistogram.rb
|
|
367
354
|
- test/test_trackbar.rb
|
|
368
|
-
- test/
|
|
369
|
-
- test/
|
|
370
|
-
- test/test_cvcircle32f.rb
|
|
371
|
-
- test/test_cvcapture.rb
|
|
355
|
+
- test/test_cvhistogram.rb
|
|
356
|
+
- test/test_cvpoint.rb
|
|
372
357
|
- test/test_cvmat_dxt.rb
|
|
373
|
-
- test/test_cvrect.rb
|
|
374
358
|
- test/test_iplconvkernel.rb
|
|
375
|
-
- test/
|
|
376
|
-
- test/test_cvavgcomp.rb
|
|
377
|
-
- test/test_cvscalar.rb
|
|
378
|
-
- test/test_pointset.rb
|
|
359
|
+
- test/test_cvconnectedcomp.rb
|
|
379
360
|
- test/test_curve.rb
|
|
380
|
-
- test/test_cvtermcriteria.rb
|
|
381
|
-
- test/test_cvtwopoints.rb
|
|
382
|
-
- test/test_cvsurfparams.rb
|
|
383
|
-
- test/test_cvpoint2d32f.rb
|
|
384
|
-
- test/test_cvpoint3d32f.rb
|
|
385
|
-
- test/test_cvfeaturetree.rb
|
|
386
361
|
- test/test_mouseevent.rb
|
|
387
|
-
- test/
|
|
388
|
-
- test/
|
|
362
|
+
- test/test_cvsurfpoint.rb
|
|
363
|
+
- test/test_eigenfaces.rb
|
|
364
|
+
- test/test_cvtwopoints.rb
|
|
365
|
+
- test/test_cvbox2d.rb
|
|
366
|
+
- test/test_cvmat_imageprocessing.rb
|
|
367
|
+
- test/test_cvtermcriteria.rb
|
|
389
368
|
- test/test_fisherfaces.rb
|
|
390
|
-
- test/
|
|
391
|
-
- test/
|
|
369
|
+
- test/test_cvvideowriter.rb
|
|
370
|
+
- test/test_cvmoments.rb
|
|
392
371
|
- test/test_cvsize2d32f.rb
|
|
393
|
-
- test/
|
|
372
|
+
- test/test_cvsize.rb
|
|
373
|
+
- test/test_cvcircle32f.rb
|
|
374
|
+
- test/test_cvavgcomp.rb
|
|
375
|
+
- test/test_cvscalar.rb
|
|
376
|
+
- test/test_cvhaarclassifiercascade.rb
|
|
377
|
+
- test/test_cvrect.rb
|
|
378
|
+
- test/test_cvfont.rb
|
|
394
379
|
- test/test_cvmat_drawing.rb
|
|
380
|
+
- test/test_cvhumoments.rb
|
|
381
|
+
- test/test_cvmat.rb
|
|
382
|
+
- test/test_cvcapture.rb
|
|
383
|
+
- test/test_pointset.rb
|
|
384
|
+
- test/test_cvcontour.rb
|
|
385
|
+
- test/test_opencv.rb
|
|
386
|
+
- test/test_cvline.rb
|
|
395
387
|
- test/test_lbph.rb
|
|
396
|
-
- test/
|
|
388
|
+
- test/test_iplimage.rb
|
|
389
|
+
- test/test_cvcontourtree.rb
|
|
397
390
|
- test/test_window.rb
|
|
391
|
+
- test/test_cvpoint3d32f.rb
|
|
392
|
+
- test/test_cvseq.rb
|
|
393
|
+
- test/test_preliminary.rb
|
|
394
|
+
- test/test_cvsurfparams.rb
|
|
395
|
+
- test/test_cvchain.rb
|
|
396
|
+
- test/test_cvfeaturetree.rb
|
|
397
|
+
- test/test_cvpoint2d32f.rb
|
|
398
|
+
- test/test_cverror.rb
|
|
398
399
|
- test/test_cvslice.rb
|
|
399
|
-
- test/test_opencv.rb
|