mirror of
https://github.com/ruby-opencv/ruby-opencv
synced 2023-03-27 23:22:12 -04:00
added type check to some CvMat methods
This commit is contained in:
parent
041f9cc89f
commit
20d71ff11c
5 changed files with 263 additions and 71 deletions
|
@ -435,8 +435,9 @@ rb_initialize(int argc, VALUE *argv, VALUE self)
|
|||
VALUE row, column, depth, channel;
|
||||
rb_scan_args(argc, argv, "22", &row, &column, &depth, &channel);
|
||||
|
||||
CvMat *ptr = rb_cvCreateMat(FIX2INT(row), FIX2INT(column),
|
||||
CV_MAKETYPE(CVMETHOD("DEPTH", depth, CV_8U), argc < 4 ? 3 : FIX2INT(channel)));
|
||||
int ch = (argc < 4) ? 3 : NUM2INT(channel);
|
||||
CvMat *ptr = rb_cvCreateMat(NUM2INT(row), NUM2INT(column),
|
||||
CV_MAKETYPE(CVMETHOD("DEPTH", depth, CV_8U), ch));
|
||||
free(DATA_PTR(self));
|
||||
DATA_PTR(self) = ptr;
|
||||
|
||||
|
@ -721,11 +722,11 @@ rb_copy(int argc, VALUE *argv, VALUE self)
|
|||
cvCopy(src, CVMAT(value));
|
||||
return Qnil;
|
||||
}
|
||||
else if (rb_obj_is_kind_of(value, rb_cFixnum)) {
|
||||
else if (FIXNUM_P(value)) {
|
||||
int n = FIX2INT(value);
|
||||
if (n > 0) {
|
||||
copied = rb_ary_new2(n);
|
||||
for (int i = 0; i < n; i++) {
|
||||
for (int i = 0; i < n; ++i) {
|
||||
VALUE tmp = new_mat_kind_object(size, self);
|
||||
cvCopy(src, CVMAT(tmp));
|
||||
rb_ary_store(copied, i, tmp);
|
||||
|
@ -962,13 +963,15 @@ VALUE
|
|||
rb_slice_width(VALUE self, VALUE num)
|
||||
{
|
||||
int n = NUM2INT(num);
|
||||
if (n < 1) {rb_raise(rb_eArgError, "number of piece should be > 0");}
|
||||
if (n < 1)
|
||||
rb_raise(rb_eArgError, "number of piece should be > 0");
|
||||
CvSize size = cvGetSize(CVARR(self));
|
||||
if (size.width % n != 0) {rb_warn("width does not div correctly.");}
|
||||
if (size.width % n != 0)
|
||||
rb_warn("width does not div correctly.");
|
||||
int div_x = size.width / n;
|
||||
VALUE ary = rb_ary_new2(n);
|
||||
for (int i = 0; i < n; i++) {
|
||||
CvRect rect = {div_x * i, 0, div_x, size.height};
|
||||
for (int i = 0; i < n; ++i) {
|
||||
CvRect rect = { div_x * i, 0, div_x, size.height };
|
||||
rb_ary_push(ary, DEPEND_OBJECT(rb_klass, cvGetSubRect(CVARR(self), RB_CVALLOC(CvMat), rect), self));
|
||||
}
|
||||
return ary;
|
||||
|
@ -987,13 +990,15 @@ VALUE
|
|||
rb_slice_height(VALUE self, VALUE num)
|
||||
{
|
||||
int n = NUM2INT(num);
|
||||
if (n < 1) {rb_raise(rb_eArgError, "number of piece should be > 0");}
|
||||
if (n < 1)
|
||||
rb_raise(rb_eArgError, "number of piece should be > 0");
|
||||
CvSize size = cvGetSize(CVARR(self));
|
||||
if (size.height % n != 0) {rb_warn("height does not div correctly.");}
|
||||
if (size.height % n != 0)
|
||||
rb_warn("height does not div correctly.");
|
||||
int div_y = size.height / n;
|
||||
VALUE ary = rb_ary_new2(n);
|
||||
for (int i = 0; i < n; i++) {
|
||||
CvRect rect = {0, div_y * i, size.width, div_y};
|
||||
for (int i = 0; i < n; ++i) {
|
||||
CvRect rect = { 0, div_y * i, size.width, div_y };
|
||||
rb_ary_push(ary, DEPEND_OBJECT(rb_klass, cvGetSubRect(CVARR(self), RB_CVALLOC(CvMat), rect), self));
|
||||
}
|
||||
return ary;
|
||||
|
@ -1011,13 +1016,15 @@ VALUE
|
|||
rb_row(VALUE self, VALUE args)
|
||||
{
|
||||
int len = RARRAY_LEN(args);
|
||||
if (len < 1) {rb_raise(rb_eArgError, "wrong number of argument.(more than 1)");}
|
||||
if (len < 1)
|
||||
rb_raise(rb_eArgError, "wrong number of argument.(more than 1)");
|
||||
VALUE ary = rb_ary_new2(len);
|
||||
for (int i = 0; i < len; i++) {
|
||||
for (int i = 0; i < len; ++i) {
|
||||
VALUE value = rb_ary_entry(args, i);
|
||||
if (FIXNUM_P(value)) {
|
||||
rb_ary_store(ary, i, DEPEND_OBJECT(rb_klass, cvGetRow(CVARR(self), RB_CVALLOC(CvMat), FIX2INT(value)), self));
|
||||
}else{
|
||||
}
|
||||
else {
|
||||
CvSlice slice = VALUE_TO_CVSLICE(value);
|
||||
rb_ary_store(ary, i, DEPEND_OBJECT(rb_klass, cvGetRows(CVARR(self), RB_CVALLOC(CvMat),
|
||||
slice.start_index, slice.end_index), self));
|
||||
|
@ -1038,13 +1045,15 @@ VALUE
|
|||
rb_col(VALUE self, VALUE args)
|
||||
{
|
||||
int len = RARRAY_LEN(args);
|
||||
if (len < 1) {rb_raise(rb_eArgError, "wrong number of argument.(more than 1)");}
|
||||
if (len < 1)
|
||||
rb_raise(rb_eArgError, "wrong number of argument.(more than 1)");
|
||||
VALUE ary = rb_ary_new2(len);
|
||||
for (int i = 0; i < len; i++) {
|
||||
for (int i = 0; i < len; ++i) {
|
||||
VALUE value = rb_ary_entry(args, i);
|
||||
if (FIXNUM_P(value)) {
|
||||
rb_ary_store(ary, i, DEPEND_OBJECT(rb_klass, cvGetCol(CVARR(self), RB_CVALLOC(CvMat), FIX2INT(value)), self));
|
||||
}else{
|
||||
}
|
||||
else {
|
||||
CvSlice slice = VALUE_TO_CVSLICE(value);
|
||||
rb_ary_store(ary, i, DEPEND_OBJECT(rb_klass, cvGetCols(CVARR(self), RB_CVALLOC(CvMat),
|
||||
slice.start_index, slice.end_index), self));
|
||||
|
@ -1065,7 +1074,7 @@ VALUE
|
|||
rb_each_row(VALUE self)
|
||||
{
|
||||
int rows = CVMAT(self)->rows;
|
||||
for (int i = 0; i < rows; i++) {
|
||||
for (int i = 0; i < rows; ++i) {
|
||||
rb_yield(DEPEND_OBJECT(rb_klass, cvGetRow(CVARR(self), RB_CVALLOC(CvMat), i), self));
|
||||
}
|
||||
return self;
|
||||
|
@ -1083,7 +1092,7 @@ VALUE
|
|||
rb_each_col(VALUE self)
|
||||
{
|
||||
int cols = CVMAT(self)->cols;
|
||||
for (int i = 0; i < cols; i++) {
|
||||
for (int i = 0; i < cols; ++i) {
|
||||
rb_yield(DEPEND_OBJECT(rb_klass, cvGetCol(CVARR(self), RB_CVALLOC(CvMat), i), self));
|
||||
}
|
||||
return self;
|
||||
|
@ -1094,7 +1103,7 @@ rb_each_col(VALUE self)
|
|||
* diag(<i>[val = 0]</i>) -> cvmat
|
||||
*
|
||||
* Return one of array diagonals.
|
||||
* <i>val</i> is zeo corresponds to the main diagonal, -1 corresponds to the diagonal above the main etc, 1 corresponds to the diagonal below the main etc.
|
||||
* <i>val</i> is zero corresponds to the main diagonal, -1 corresponds to the diagonal above the main etc, 1 corresponds to the diagonal below the main etc.
|
||||
*
|
||||
*/
|
||||
VALUE
|
||||
|
@ -1155,7 +1164,7 @@ rb_dims(VALUE self)
|
|||
VALUE
|
||||
rb_dim_size(VALUE self, VALUE index)
|
||||
{
|
||||
return INT2FIX(cvGetDimSize(CVARR(self), FIX2INT(index)));
|
||||
return INT2FIX(cvGetDimSize(CVARR(self), NUM2INT(index)));
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -1168,11 +1177,11 @@ VALUE
|
|||
rb_aref(VALUE self, VALUE args)
|
||||
{
|
||||
int index[CV_MAX_DIM];
|
||||
for (int i = 0; i < RARRAY_LEN(args); i++) {
|
||||
for (int i = 0; i < RARRAY_LEN(args); ++i) {
|
||||
index[i] = NUM2INT(rb_ary_entry(args, i));
|
||||
}
|
||||
CvScalar scalar = cvScalarAll(0);
|
||||
switch(RARRAY_LEN(args)) {
|
||||
switch (RARRAY_LEN(args)) {
|
||||
case 1:
|
||||
scalar = cvGet1D(CVARR(self), index[0]);
|
||||
break;
|
||||
|
@ -1198,10 +1207,10 @@ rb_aset(VALUE self, VALUE args)
|
|||
{
|
||||
CvScalar scalar = VALUE_TO_CVSCALAR(rb_ary_pop(args));
|
||||
int index[CV_MAX_DIM];
|
||||
for (int i = 0; i < RARRAY_LEN(args); i++) {
|
||||
for (int i = 0; i < RARRAY_LEN(args); ++i) {
|
||||
index[i] = NUM2INT(rb_ary_entry(args, i));
|
||||
}
|
||||
switch(RARRAY_LEN(args)) {
|
||||
switch (RARRAY_LEN(args)) {
|
||||
case 1:
|
||||
cvSet1D(CVARR(self), index[0], scalar);
|
||||
break;
|
||||
|
@ -1268,6 +1277,7 @@ rb_set_data(VALUE self, VALUE data)
|
|||
break;
|
||||
default:
|
||||
rb_raise(rb_eTypeError, "Invalid CvMat depth");
|
||||
break;
|
||||
}
|
||||
cvSetData(self_ptr, array, self_ptr->step);
|
||||
|
||||
|
@ -1386,7 +1396,8 @@ rb_set_identity_bang(int argc, VALUE *argv, VALUE self)
|
|||
CvScalar value;
|
||||
if (rb_scan_args(argc, argv, "01", &val) < 1) {
|
||||
value = cvRealScalar(1);
|
||||
}else{
|
||||
}
|
||||
else{
|
||||
value = VALUE_TO_CVSCALAR(val);
|
||||
}
|
||||
cvSetIdentity(CVARR(self), value);
|
||||
|
@ -1447,8 +1458,8 @@ rb_reshape(VALUE self, VALUE hash)
|
|||
rb_raise(rb_eTypeError, "argument should be Hash that contaion key (:row, :channel).");
|
||||
VALUE channel = rb_hash_aref(hash, ID2SYM(rb_intern("channel")));
|
||||
VALUE rows = rb_hash_aref(hash, ID2SYM(rb_intern("rows")));
|
||||
return DEPEND_OBJECT(rb_klass, cvReshape(CVARR(self), RB_CVALLOC(CvMat), NIL_P(channel) ? 0 : FIX2INT(channel),
|
||||
NIL_P(rows) ? 0 : FIX2INT(rows)), self);
|
||||
return DEPEND_OBJECT(rb_klass, cvReshape(CVARR(self), RB_CVALLOC(CvMat), NIL_P(channel) ? 0 : NUM2INT(channel),
|
||||
NIL_P(rows) ? 0 : NUM2INT(rows)), self);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -1535,12 +1546,12 @@ rb_split(VALUE self)
|
|||
{
|
||||
int type = CVMAT(self)->type, depth = CV_MAT_DEPTH(type), channel = CV_MAT_CN(type);
|
||||
CvSize size = cvGetSize(CVARR(self));
|
||||
CvMat *dest[] = {NULL, NULL, NULL, NULL};
|
||||
for (int i = 0; i < channel; i++)
|
||||
CvMat *dest[] = { NULL, NULL, NULL, NULL };
|
||||
for (int i = 0; i < channel; ++i)
|
||||
dest[i] = rb_cvCreateMat(size.height, size.width, CV_MAKETYPE(depth, 1));
|
||||
cvSplit(CVARR(self), dest[0], dest[1], dest[2], dest[3]);
|
||||
VALUE ary = rb_ary_new2(channel);
|
||||
for (int i = 0; i < channel; i++)
|
||||
for (int i = 0; i < channel; ++i)
|
||||
rb_ary_store(ary, i, OPENCV_OBJECT(rb_klass, dest[i]));
|
||||
return ary;
|
||||
}
|
||||
|
@ -1560,28 +1571,29 @@ rb_merge(VALUE klass, VALUE args)
|
|||
{
|
||||
VALUE object, dest;
|
||||
int len = RARRAY_LEN(args);
|
||||
if (!(len > 0) || len > CV_CN_MAX) {
|
||||
if (len <= 0 || len > 4) {
|
||||
rb_raise(rb_eArgError, "wrong number of argument (%d for 1..4)", len);
|
||||
}
|
||||
CvMat *src[] = {NULL, NULL, NULL, NULL}, *tmp = 0;
|
||||
for (int i = 0; i < len; i++) {
|
||||
CvMat *src[] = { NULL, NULL, NULL, NULL }, *tmp = 0;
|
||||
for (int i = 0; i < len; ++i) {
|
||||
if (rb_obj_is_kind_of((object = rb_ary_entry(args, i)), rb_klass)) {
|
||||
src[i] = CVMAT(object);
|
||||
if (CV_MAT_CN(src[i]->type) != 1) {
|
||||
if (CV_MAT_CN(src[i]->type) != 1)
|
||||
rb_raise(rb_eStandardError, "image should be single-channel CvMat.");
|
||||
}
|
||||
if (!tmp)
|
||||
tmp = src[i];
|
||||
else{
|
||||
else {
|
||||
if (!CV_ARE_SIZES_EQ(tmp, src[i]))
|
||||
rb_raise(rb_eStandardError, "image size should be same.");
|
||||
if (!CV_ARE_DEPTHS_EQ(tmp, src[i]))
|
||||
rb_raise(rb_eStandardError, "image depth should be same.");
|
||||
}
|
||||
}else if (NIL_P(object)) {
|
||||
}
|
||||
else if (NIL_P(object)) {
|
||||
src[i] = NULL;
|
||||
}else
|
||||
rb_raise(rb_eTypeError, "argument should be CvMat or subclass of it.");
|
||||
}
|
||||
else
|
||||
rb_raise(rb_eTypeError, "argument should be CvMat or subclass");
|
||||
}
|
||||
// TODO: adapt IplImage
|
||||
dest = new_object(cvGetSize(tmp), CV_MAKETYPE(CV_MAT_DEPTH(tmp->type), len));
|
||||
|
@ -1632,9 +1644,9 @@ rb_rand_shuffle_bang(int argc, VALUE *argv, VALUE self)
|
|||
VALUE seed, iter;
|
||||
CvRNG rng;
|
||||
rb_scan_args(argc, argv, "02", &seed, &iter);
|
||||
if(NIL_P(seed))
|
||||
if (NIL_P(seed))
|
||||
cvRandShuffle(CVARR(self), NULL, IF_INT(iter, 1));
|
||||
else{
|
||||
else {
|
||||
rng = cvRNG(rb_num2ll(seed));
|
||||
cvRandShuffle(CVARR(self), &rng, IF_INT(iter, 1));
|
||||
}
|
||||
|
@ -1657,7 +1669,7 @@ VALUE
|
|||
rb_lut(VALUE self, VALUE lut)
|
||||
{
|
||||
VALUE dest = copy(self);
|
||||
cvLUT(CVARR(self), CVARR(dest), CVARR(lut));
|
||||
cvLUT(CVARR(self), CVARR(dest), CVMAT_WITH_CHECK(lut));
|
||||
return dest;
|
||||
}
|
||||
|
||||
|
|
|
@ -287,6 +287,15 @@ CVMAT(VALUE object)
|
|||
return cvGetMat(ptr, &stub);
|
||||
}
|
||||
|
||||
inline CvMat*
|
||||
CVMAT_WITH_CHECK(VALUE object)
|
||||
{
|
||||
if (!rb_obj_is_kind_of(object, cCvMat::rb_class()))
|
||||
rb_raise(rb_eTypeError, "wrong argument type %s (expected %s)",
|
||||
rb_class2name(CLASS_OF(object)), rb_class2name(cCvMat::rb_class()));
|
||||
return CVMAT(object);
|
||||
}
|
||||
|
||||
inline CvMat*
|
||||
MASK(VALUE object)
|
||||
{
|
||||
|
|
|
@ -50,12 +50,15 @@ CVSCALAR(VALUE object)
|
|||
inline CvScalar
|
||||
VALUE_TO_CVSCALAR(VALUE object)
|
||||
{
|
||||
if(FIXNUM_P(object))
|
||||
if (FIXNUM_P(object))
|
||||
return cvScalarAll(FIX2INT(object));
|
||||
return cvScalar(NUM2DBL(rb_funcall(object, rb_intern("[]"), 1, INT2FIX(0))),
|
||||
NUM2DBL(rb_funcall(object, rb_intern("[]"), 1, INT2FIX(1))),
|
||||
NUM2DBL(rb_funcall(object, rb_intern("[]"), 1, INT2FIX(2))),
|
||||
NUM2DBL(rb_funcall(object, rb_intern("[]"), 1, INT2FIX(3))));
|
||||
else if (rb_respond_to(object, rb_intern("[]")))
|
||||
return cvScalar(NUM2DBL(rb_funcall(object, rb_intern("[]"), 1, INT2FIX(0))),
|
||||
NUM2DBL(rb_funcall(object, rb_intern("[]"), 1, INT2FIX(1))),
|
||||
NUM2DBL(rb_funcall(object, rb_intern("[]"), 1, INT2FIX(2))),
|
||||
NUM2DBL(rb_funcall(object, rb_intern("[]"), 1, INT2FIX(3))));
|
||||
else
|
||||
rb_raise(rb_eTypeError, "require %s or compatible object.", rb_class2name(cCvScalar::rb_class()));
|
||||
}
|
||||
|
||||
__NAMESPACE_END_OPENCV
|
||||
|
|
|
@ -12,17 +12,19 @@ class OpenCVTestCase < Test::Unit::TestCase
|
|||
HAARCASCADE_FRONTALFACE_ALT = SAMPLE_DIR + 'haarcascade_frontalface_alt.xml.gz'
|
||||
AVI_SAMPLE = SAMPLE_DIR + 'movie_sample.avi'
|
||||
|
||||
DUMMY_OBJ = Digest::MD5.new # dummy object for argument type check test
|
||||
|
||||
CvMat.class_eval do
|
||||
# Range check for debug
|
||||
alias original_aref []
|
||||
alias original_aset []=;
|
||||
|
||||
def [](*idx)
|
||||
if idx.size == 1
|
||||
if idx.size == 1 and idx[0].is_a? Numeric
|
||||
n = idx[0]
|
||||
throw ArgumentError.new("index #{n} is out of range") if n >= rows * cols
|
||||
else
|
||||
j, i = *idx
|
||||
elsif idx.all? { |elem| elem.is_a? Numeric }
|
||||
j, i = *(idx.map { |x| x.to_i })
|
||||
throw ArgumentError.new("index for row #{j} is out of range") if j >= rows
|
||||
throw ArgumentError.new("index for column #{i} is out of range") if i >= cols
|
||||
end
|
||||
|
@ -30,13 +32,13 @@ class OpenCVTestCase < Test::Unit::TestCase
|
|||
end
|
||||
|
||||
def []=(*args)
|
||||
if args.size == 2
|
||||
if args.size == 2 and args[0].is_a? Numeric
|
||||
n = args[0] # index
|
||||
throw ArgumentError.new("index #{n} is out of range") if n >= rows * cols
|
||||
else
|
||||
elsif args[0..1].all? { |elem| elem.is_a? Numeric }
|
||||
j, i = *args
|
||||
throw ArgumentError.new("index for row #{j} is out of range") if j >= rows
|
||||
throw ArgumentError.new("index for column #{i} is out of range") if i >= cols
|
||||
throw ArgumentError.new("index for row #{j} is out of range") if j.to_i >= rows
|
||||
throw ArgumentError.new("index for column #{i} is out of range") if i.to_i >= cols
|
||||
end
|
||||
original_aset(*args)
|
||||
end
|
||||
|
|
|
@ -36,6 +36,16 @@ class TestCvMat < OpenCVTestCase
|
|||
assert_equal(ch, m.channel)
|
||||
}
|
||||
}
|
||||
|
||||
assert_raise(TypeError) {
|
||||
m = CvMat.new(DUMMY_OBJ, 20, :cv8u, 1)
|
||||
}
|
||||
assert_raise(TypeError) {
|
||||
m = CvMat.new(10, DUMMY_OBJ, :cv8u, 1)
|
||||
}
|
||||
assert_raise(TypeError) {
|
||||
m = CvMat.new(10, 20, :cv8u, DUMMY_OBJ)
|
||||
}
|
||||
end
|
||||
|
||||
def test_load
|
||||
|
@ -67,10 +77,10 @@ class TestCvMat < OpenCVTestCase
|
|||
CvMat.load
|
||||
}
|
||||
assert_raise(TypeError) {
|
||||
CvMat.load(123)
|
||||
CvMat.load(DUMMY_OBJ)
|
||||
}
|
||||
assert_raise(TypeError) {
|
||||
CvMat.load(FILENAME_CAT, 'foobar')
|
||||
CvMat.load(FILENAME_CAT, DUMMY_OBJ)
|
||||
}
|
||||
assert_raise(StandardError) {
|
||||
CvMat.load('file/does/not/exist')
|
||||
|
@ -198,9 +208,9 @@ class TestCvMat < OpenCVTestCase
|
|||
}
|
||||
}
|
||||
assert_nil(m1.copy(-1))
|
||||
|
||||
|
||||
assert_raise(ArgumentError) {
|
||||
m1.copy('foobar')
|
||||
m1.copy(DUMMY_OBJ)
|
||||
}
|
||||
end
|
||||
|
||||
|
@ -286,6 +296,28 @@ class TestCvMat < OpenCVTestCase
|
|||
assert_cvscalar_equal(m1[j, i], m2[j, i])
|
||||
}
|
||||
}
|
||||
|
||||
assert_raise(TypeError) {
|
||||
m1.sub_rect(DUMMY_OBJ)
|
||||
}
|
||||
assert_raise(TypeError) {
|
||||
m1.sub_rect(DUMMY_OBJ, CvSize.new(1, 2))
|
||||
}
|
||||
assert_raise(TypeError) {
|
||||
m1.sub_rect(CvPoint.new(1, 2), DUMMY_OBJ)
|
||||
}
|
||||
assert_raise(TypeError) {
|
||||
m1.sub_rect(DUMMY_OBJ, 2, 3, 4)
|
||||
}
|
||||
assert_raise(TypeError) {
|
||||
m1.sub_rect(1, DUMMY_OBJ, 3, 4)
|
||||
}
|
||||
assert_raise(TypeError) {
|
||||
m1.sub_rect(1, 2, DUMMY_OBJ, 4)
|
||||
}
|
||||
assert_raise(TypeError) {
|
||||
m1.sub_rect(1, 2, 3, DUMMY_OBJ)
|
||||
}
|
||||
end
|
||||
|
||||
def test_slice_width
|
||||
|
@ -304,6 +336,13 @@ class TestCvMat < OpenCVTestCase
|
|||
assert_cvscalar_equal(m1[j, (m1.width / 2) + i], mr[j, i])
|
||||
}
|
||||
}
|
||||
|
||||
assert_raise(ArgumentError) {
|
||||
m1.slice_width(0)
|
||||
}
|
||||
assert_raise(TypeError) {
|
||||
m1.slice_width(DUMMY_OBJ)
|
||||
}
|
||||
end
|
||||
|
||||
def test_slice_height
|
||||
|
@ -322,6 +361,13 @@ class TestCvMat < OpenCVTestCase
|
|||
assert_cvscalar_equal(m1[(m1.height / 2) + j, i], mb[j, i])
|
||||
}
|
||||
}
|
||||
|
||||
assert_raise(ArgumentError) {
|
||||
m1.slice_height(0)
|
||||
}
|
||||
assert_raise(TypeError) {
|
||||
m1.slice_height(DUMMY_OBJ)
|
||||
}
|
||||
end
|
||||
|
||||
def test_row
|
||||
|
@ -343,6 +389,14 @@ class TestCvMat < OpenCVTestCase
|
|||
assert_cvscalar_equal(m1[1, i], m2[i])
|
||||
assert_cvscalar_equal(m1[2, i], m3[i])
|
||||
}
|
||||
|
||||
assert_raise(TypeError) {
|
||||
m1.row(DUMMY_OBJ)
|
||||
}
|
||||
flunk('FIXME: Not handle out of range error yet')
|
||||
# assert_raise(ArgumentError) {
|
||||
# m1.row(-1)
|
||||
# }
|
||||
end
|
||||
|
||||
def test_col
|
||||
|
@ -364,6 +418,15 @@ class TestCvMat < OpenCVTestCase
|
|||
assert_cvscalar_equal(m1[j, 1], m2[j])
|
||||
assert_cvscalar_equal(m1[j, 2], m3[j])
|
||||
}
|
||||
|
||||
assert_raise(TypeError) {
|
||||
m1.col(DUMMY_OBJ)
|
||||
}
|
||||
|
||||
flunk('FIXME: Not handle out of range error yet')
|
||||
# assert_raise(ArgumentError) {
|
||||
# m1.col(-1)
|
||||
# }
|
||||
end
|
||||
|
||||
def test_each_row
|
||||
|
@ -438,6 +501,13 @@ class TestCvMat < OpenCVTestCase
|
|||
a.each_with_index { |s, i|
|
||||
assert_cvscalar_equal(s, d[i])
|
||||
}
|
||||
|
||||
flunk('FIXME: Not handle out of range error yet')
|
||||
# [m.rows, m.cols, -m.rows, -m.cols].each { |d|
|
||||
# assert_raise(ArgumentError) {
|
||||
# m.diag(d)
|
||||
# }
|
||||
# }
|
||||
end
|
||||
|
||||
def test_size
|
||||
|
@ -455,6 +525,10 @@ class TestCvMat < OpenCVTestCase
|
|||
m = CvMat.new(2, 3)
|
||||
assert_equal(2, m.dim_size(0))
|
||||
assert_equal(3, m.dim_size(1))
|
||||
|
||||
assert_raise(TypeError) {
|
||||
m.dim_size(DUMMY_OBJ)
|
||||
}
|
||||
end
|
||||
|
||||
def test_aref
|
||||
|
@ -468,6 +542,10 @@ class TestCvMat < OpenCVTestCase
|
|||
|
||||
# Alias
|
||||
assert_cvscalar_equal(CvScalar.new(1, 1, 1, 1), m.at(0))
|
||||
|
||||
assert_raise(TypeError) {
|
||||
m[DUMMY_OBJ]
|
||||
}
|
||||
end
|
||||
|
||||
def test_aset
|
||||
|
@ -480,6 +558,13 @@ class TestCvMat < OpenCVTestCase
|
|||
assert_cvscalar_equal(CvScalar.new(4, 4, 4, 4), m[1, 0])
|
||||
m[1, 0, 2, 4] = CvScalar.new(5, 5, 5, 5)
|
||||
assert_cvscalar_equal(CvScalar.new(5, 5, 5, 5), m[1, 0])
|
||||
|
||||
assert_raise(TypeError) {
|
||||
m[DUMMY_OBJ] = CvScalar.new(10, 10, 10, 10)
|
||||
}
|
||||
assert_raise(TypeError) {
|
||||
m[0] = DUMMY_OBJ
|
||||
}
|
||||
end
|
||||
|
||||
def test_set_data
|
||||
|
@ -507,6 +592,14 @@ class TestCvMat < OpenCVTestCase
|
|||
(m.rows * m.cols).times { |i|
|
||||
assert_equal(a.flatten[i], m[i][0])
|
||||
}
|
||||
|
||||
[CV_8U, CV_8S, CV_16U, CV_16S, CV_32S, CV_32F, CV_64F].each { |depth|
|
||||
m = CvMat.new(2, 3, depth, 1)
|
||||
assert_raise(TypeError) {
|
||||
a = [DUMMY_OBJ] * 6
|
||||
m.set_data(a)
|
||||
}
|
||||
}
|
||||
end
|
||||
|
||||
def test_fill
|
||||
|
@ -576,6 +669,13 @@ class TestCvMat < OpenCVTestCase
|
|||
end
|
||||
}
|
||||
}
|
||||
|
||||
assert_raise(TypeError) {
|
||||
m1.fill(DUMMY_OBJ)
|
||||
}
|
||||
assert_raise(TypeError) {
|
||||
m1.fill(CvScalar.new(1), DUMMY_OBJ)
|
||||
}
|
||||
end
|
||||
|
||||
def test_clear
|
||||
|
@ -616,6 +716,26 @@ class TestCvMat < OpenCVTestCase
|
|||
end
|
||||
}
|
||||
}
|
||||
|
||||
m1 = CvMat.new(5, 5, :cv8u, 4)
|
||||
s = CvScalar.new(1, 2, 3, 4)
|
||||
m2 = m1.identity(s)
|
||||
m1.identity!(s)
|
||||
m2.height.times { |j|
|
||||
m2.width.times { |i|
|
||||
if i == j
|
||||
assert_cvscalar_equal(s, m1[j, i])
|
||||
assert_cvscalar_equal(s, m2[j, i])
|
||||
else
|
||||
assert_cvscalar_equal(CvScalar.new(0, 0, 0, 0), m1[j, i])
|
||||
assert_cvscalar_equal(CvScalar.new(0, 0, 0, 0), m2[j, i])
|
||||
end
|
||||
}
|
||||
}
|
||||
|
||||
assert_raise(TypeError) {
|
||||
m1.identity(DUMMY_OBJ)
|
||||
}
|
||||
end
|
||||
|
||||
def test_range
|
||||
|
@ -626,13 +746,17 @@ class TestCvMat < OpenCVTestCase
|
|||
assert_cvscalar_equal(CvScalar.new(i, 0, 0, 0), m1[0, i])
|
||||
assert_cvscalar_equal(CvScalar.new(i, 0, 0, 0), m2[0, i])
|
||||
}
|
||||
|
||||
assert_raise(TypeError) {
|
||||
m1.range(DUMMY_OBJ, 2)
|
||||
}
|
||||
assert_raise(TypeError) {
|
||||
m1.range(1, DUMMY_OBJ)
|
||||
}
|
||||
end
|
||||
|
||||
def test_reshape
|
||||
m = create_cvmat(2, 3, CV_8U, 3)
|
||||
assert_raise(TypeError) {
|
||||
m.reshape(1)
|
||||
}
|
||||
|
||||
vec = m.reshape(:rows => 1)
|
||||
assert_equal(6, vec.width)
|
||||
|
@ -654,13 +778,16 @@ class TestCvMat < OpenCVTestCase
|
|||
assert_cvscalar_equal(m[j, i], CvScalar.new(s1, s2, s3, 0))
|
||||
}
|
||||
}
|
||||
|
||||
[DUMMY_OBJ, { :rows => DUMMY_OBJ }, { :channel => DUMMY_OBJ }].each { |arg|
|
||||
assert_raise(TypeError) {
|
||||
m.reshape(arg)
|
||||
}
|
||||
}
|
||||
end
|
||||
|
||||
def test_repeat
|
||||
m1 = create_cvmat(2, 3, :cv8u, 3)
|
||||
assert_raise(TypeError) {
|
||||
m1.repeat(1)
|
||||
}
|
||||
m2 = CvMat.new(6, 9, :cv8u, 3)
|
||||
m2 = m1.repeat(m2)
|
||||
m2.height.times { |j|
|
||||
|
@ -669,6 +796,9 @@ class TestCvMat < OpenCVTestCase
|
|||
assert_cvscalar_equal(m2[j, i], a)
|
||||
}
|
||||
}
|
||||
assert_raise(TypeError) {
|
||||
m1.repeat(DUMMY_OBJ)
|
||||
}
|
||||
end
|
||||
|
||||
def test_flip
|
||||
|
@ -686,7 +816,7 @@ class TestCvMat < OpenCVTestCase
|
|||
m7 = m0.clone
|
||||
m7.flip!
|
||||
m8 = m0.flip
|
||||
|
||||
|
||||
[m1, m2, m3, m4, m5, m6, m7, m8].each { |m|
|
||||
assert_equal(m0.height, m.height)
|
||||
assert_equal(m0.width, m.width)
|
||||
|
@ -752,6 +882,31 @@ class TestCvMat < OpenCVTestCase
|
|||
assert_cvscalar_equal(m0[j, i], m[j, i])
|
||||
}
|
||||
}
|
||||
|
||||
m5 = create_cvmat(2, 3, :cv8u, 1) { |j, i, c|
|
||||
CvScalar.new(c * 50)
|
||||
}
|
||||
|
||||
assert_raise(TypeError) {
|
||||
CvMat.merge(DUMMY_OBJ)
|
||||
}
|
||||
assert_raise(ArgumentError) {
|
||||
CvMat.merge
|
||||
}
|
||||
assert_raise(ArgumentError) {
|
||||
CvMat.merge(m1, m2, m3, m4, m5)
|
||||
}
|
||||
assert_raise(StandardError) {
|
||||
CvMat.merge(CvMat.new(1, 2, :cv8u, 2))
|
||||
}
|
||||
assert_raise(StandardError) {
|
||||
CvMat.merge(CvMat.new(1, 2, :cv8u, 1),
|
||||
CvMat.new(2, 2, :cv8u, 1))
|
||||
}
|
||||
assert_raise(StandardError) {
|
||||
CvMat.merge(CvMat.new(1, 2, :cv8u, 1),
|
||||
CvMat.new(1, 2, :cv32f, 1))
|
||||
}
|
||||
end
|
||||
|
||||
def test_mix_channels
|
||||
|
@ -783,6 +938,13 @@ class TestCvMat < OpenCVTestCase
|
|||
[m1, m2, m3, m4].each { |m|
|
||||
assert_shuffled_equal.call(m0, m)
|
||||
}
|
||||
|
||||
assert_raise(TypeError) {
|
||||
m0.rand_shuffle(DUMMY_OBJ)
|
||||
}
|
||||
assert_raise(TypeError) {
|
||||
m0.rand_shuffle(123, DUMMY_OBJ)
|
||||
}
|
||||
end
|
||||
|
||||
def test_lut
|
||||
|
@ -800,6 +962,10 @@ class TestCvMat < OpenCVTestCase
|
|||
assert_cvscalar_equal(CvScalar.new(r, g, b, 0), m[j, i])
|
||||
}
|
||||
}
|
||||
|
||||
assert_raise(TypeError) {
|
||||
m0.lut(DUMMY_OBJ)
|
||||
}
|
||||
end
|
||||
|
||||
def test_convert_scale
|
||||
|
@ -1816,11 +1982,11 @@ class TestCvMat < OpenCVTestCase
|
|||
end
|
||||
|
||||
def test_svd
|
||||
flunk('CvMat#svd is not implemented yet')
|
||||
flunk('FIXME: CvMat#svd is not implemented yet')
|
||||
end
|
||||
|
||||
def test_svdksb
|
||||
flunk('CvMat#svdksb is not implemented yet')
|
||||
flunk('FIXME: CvMat#svdksb is not implemented yet')
|
||||
end
|
||||
|
||||
def test_eigenvv
|
||||
|
@ -1849,11 +2015,11 @@ class TestCvMat < OpenCVTestCase
|
|||
end
|
||||
|
||||
def test_calc_covar_matrix
|
||||
flunk('CvMat#calc_covar_matrix is not implemented yet')
|
||||
flunk('FIXME: CvMat#calc_covar_matrix is not implemented yet')
|
||||
end
|
||||
|
||||
def test_mahalonobis
|
||||
flunk('CvMat#mahalonobis is not implemented yet')
|
||||
flunk('FIXME: CvMat#mahalonobis is not implemented yet')
|
||||
end
|
||||
|
||||
def test_find_homography
|
||||
|
|
Loading…
Add table
Reference in a new issue