From 7b34f21e4f154220ec1397eee50ab7635d718223 Mon Sep 17 00:00:00 2001 From: ser1zw Date: Sat, 30 Apr 2016 16:49:12 +0900 Subject: [PATCH] add cv::setIdentity --- ext/opencv/mat.cpp | 24 ++++++++++++++++++++++++ test/test_mat.rb | 13 +++++++++++++ 2 files changed, 37 insertions(+) diff --git a/ext/opencv/mat.cpp b/ext/opencv/mat.cpp index 8dd39ba..243befc 100644 --- a/ext/opencv/mat.cpp +++ b/ext/opencv/mat.cpp @@ -933,6 +933,29 @@ namespace rubyopencv { return mat2obj(dstptr, CLASS_OF(self)); } + /* + * Initializes a scaled identity matrix. + * + * @overload set_identity(s = Scalar.new(1)) + * @param s [Scalar] Value to assign to diagonal elements. + * @return [Mat] +self+ + * @opencv_func cv::setIdentity + */ + VALUE rb_set_identity(int argc, VALUE *argv, VALUE self) { + VALUE s = Qnil; + rb_scan_args(argc, argv, "01", &s); + cv::Mat* selfptr = obj2mat(self); + cv::Scalar s_value = NIL_P(s) ? cv::Scalar(1) : *(Scalar::obj2scalar(s)); + try { + cv::setIdentity(*selfptr, s_value); + } + catch (cv::Exception& e) { + Error::raise(e); + } + + return self; + } + void init() { VALUE opencv = rb_define_module("Cv"); @@ -993,6 +1016,7 @@ namespace rubyopencv { rb_define_method(rb_klass, "convert_scale_abs", RUBY_METHOD_FUNC(rb_convert_scale_abs), -1); rb_define_method(rb_klass, "convert_to", RUBY_METHOD_FUNC(rb_convert_to), -1); + rb_define_method(rb_klass, "set_identity", RUBY_METHOD_FUNC(rb_set_identity), -1); } } } diff --git a/test/test_mat.rb b/test/test_mat.rb index d060ccc..b932d38 100755 --- a/test/test_mat.rb +++ b/test/test_mat.rb @@ -566,4 +566,17 @@ class TestMat < OpenCVTestCase m.set_to(s1, DUMMY_OBJ) } end + + def test_set_identity + m = Mat::zeros(3, 3, CV_8U) + m.set_identity(Scalar.new(10)) + expected = "" + assert_equal(expected, m.to_s) + m.set_identity + expected = "" + assert_equal(expected, m.to_s) + assert_raise(TypeError) { + m.set_identity(DUMMY_OBJ) + } + end end