mirror of
https://github.com/ruby-opencv/ruby-opencv
synced 2023-03-27 23:22:12 -04:00
Merge branch 'master' into documentation
Conflicts: ext/opencv/cvmat.cpp
This commit is contained in:
commit
55cf3593cc
7 changed files with 40 additions and 36 deletions
1
Gemfile
1
Gemfile
|
@ -2,6 +2,5 @@ source :gemcutter
|
|||
|
||||
gem "hoe"
|
||||
gem "hoe-gemspec"
|
||||
gem "rspec"
|
||||
gem "rake-compiler"
|
||||
gem "yard"
|
2
Rakefile
2
Rakefile
|
@ -34,7 +34,7 @@ EOF
|
|||
|
||||
p.urls = ['http://blueruby.mydns.jp/opencv']
|
||||
|
||||
p.extra_dev_deps << ['rake-compiler', '>= 0'] << ['hoe-gemspec'] << ['rspec']
|
||||
p.extra_dev_deps << ['rake-compiler', '>= 0'] << ['hoe-gemspec']
|
||||
|
||||
Rake::ExtensionTask.new('opencv', spec) do |ext|
|
||||
ext.lib_dir = File.join('lib', 'opencv')
|
||||
|
|
|
@ -2512,25 +2512,27 @@ rb_invert(int argc, VALUE *argv, VALUE self)
|
|||
/*
|
||||
* Solves one or more linear systems or least-squares problems.
|
||||
*
|
||||
* @overload solve(mat, inversion_method = :lu)
|
||||
* @param mat [CvMat] Input matrix on the right-hand side of the system.
|
||||
* @overload solve(src1, src2, inversion_method = :lu)
|
||||
* @param src1 [CvMat] Input matrix on the left-hand side of the system.
|
||||
* @param src2 [CvMat] Input matrix on the right-hand side of the system.
|
||||
* @param inversion_method [Symbol] Inversion method.
|
||||
* * <tt>:lu</tt> - Gaussian elimincation with optimal pivot element chose.
|
||||
* * <tt>:svd</tt> - Singular value decomposition(SVD) method.
|
||||
* * <tt>:svd_sym</tt> - SVD method for a symmetric positively-defined matrix.
|
||||
* @return [Number] Output solution.
|
||||
* @opencv_func cvInvert
|
||||
* @scope class
|
||||
* @opencv_func cvSolve
|
||||
*/
|
||||
VALUE
|
||||
rb_solve(int argc, VALUE *argv, VALUE self)
|
||||
{
|
||||
VALUE mat, symbol;
|
||||
rb_scan_args(argc, argv, "11", &mat, &symbol);
|
||||
VALUE src1, src2, symbol;
|
||||
rb_scan_args(argc, argv, "21", &src1, &src2, &symbol);
|
||||
VALUE dest = Qnil;
|
||||
CvArr* arr_ptr = CVARR_WITH_CHECK(mat);
|
||||
CvArr* src2_ptr = CVARR_WITH_CHECK(src2);
|
||||
try {
|
||||
dest = new_mat_kind_object(cvGetSize(arr_ptr), self);
|
||||
cvSolve(CVARR(self), arr_ptr, CVARR(dest), CVMETHOD("INVERSION_METHOD", symbol, CV_LU));
|
||||
dest = new_mat_kind_object(cvGetSize(src2_ptr), src2);
|
||||
cvSolve(CVARR_WITH_CHECK(src1), src2_ptr, CVARR(dest), CVMETHOD("INVERSION_METHOD", symbol, CV_LU));
|
||||
}
|
||||
catch (cv::Exception& e) {
|
||||
raise_cverror(e);
|
||||
|
@ -5768,7 +5770,7 @@ init_ruby_class()
|
|||
rb_define_method(rb_klass, "det", RUBY_METHOD_FUNC(rb_det), 0);
|
||||
rb_define_alias(rb_klass, "determinant", "det");
|
||||
rb_define_method(rb_klass, "invert", RUBY_METHOD_FUNC(rb_invert), -1);
|
||||
rb_define_method(rb_klass, "solve", RUBY_METHOD_FUNC(rb_solve), -1);
|
||||
rb_define_singleton_method(rb_klass, "solve", RUBY_METHOD_FUNC(rb_solve), -1);
|
||||
rb_define_method(rb_klass, "svd", RUBY_METHOD_FUNC(rb_svd), -1);
|
||||
rb_define_method(rb_klass, "svbksb", RUBY_METHOD_FUNC(rb_svbksb), -1);
|
||||
rb_define_method(rb_klass, "eigenvv", RUBY_METHOD_FUNC(rb_eigenvv), -1);
|
||||
|
|
|
@ -332,13 +332,13 @@ rb_seq_push(VALUE self, VALUE args, int flag)
|
|||
{
|
||||
CvSeq *seq = CVSEQ(self);
|
||||
VALUE klass = seqblock_class(seq), object;
|
||||
void *elem = NULL;
|
||||
volatile void *elem = NULL;
|
||||
int len = RARRAY_LEN(args);
|
||||
for (int i = 0; i < len; ++i) {
|
||||
object = RARRAY_PTR(args)[i];
|
||||
if (CLASS_OF(object) == klass) {
|
||||
if (TYPE(object) == T_FIXNUM) {
|
||||
int int_elem = FIX2INT(object);
|
||||
volatile int int_elem = FIX2INT(object);
|
||||
elem = &int_elem;
|
||||
}
|
||||
else {
|
||||
|
@ -346,9 +346,9 @@ rb_seq_push(VALUE self, VALUE args, int flag)
|
|||
}
|
||||
try {
|
||||
if (flag == CV_FRONT)
|
||||
cvSeqPushFront(seq, elem);
|
||||
cvSeqPushFront(seq, (const void*)elem);
|
||||
else
|
||||
cvSeqPush(seq, elem);
|
||||
cvSeqPush(seq, (const void*)elem);
|
||||
}
|
||||
catch (cv::Exception& e) {
|
||||
raise_cverror(e);
|
||||
|
|
File diff suppressed because one or more lines are too long
|
@ -2353,29 +2353,35 @@ class TestCvMat < OpenCVTestCase
|
|||
elems2 = [3,
|
||||
4,
|
||||
5]
|
||||
m0 = create_cvmat(3, 3, :cv32f, 1) { |j, i, c|
|
||||
a = create_cvmat(3, 3, :cv32f, 1) { |j, i, c|
|
||||
CvScalar.new(elems1[c])
|
||||
}
|
||||
b = create_cvmat(3, 1, :cv32f, 1) { |j, i, c|
|
||||
CvScalar.new(elems2[c])
|
||||
}
|
||||
|
||||
m1 = m0.solve(b)
|
||||
m2 = m0.solve(b, :lu)
|
||||
m3 = m0.solve(b, :svd)
|
||||
m4 = m0.solve(b, :svd_sym)
|
||||
m5 = m0.solve(b, :svd_symmetric)
|
||||
m1 = CvMat.solve(a, b)
|
||||
m2 = CvMat.solve(a, b, :lu)
|
||||
m3 = CvMat.solve(a, b, :svd)
|
||||
m4 = CvMat.solve(a, b, :svd_sym)
|
||||
m5 = CvMat.solve(a, b, :svd_symmetric)
|
||||
expected = [2, -2, 1]
|
||||
[m1, m2, m3, m4, m5].each { |m|
|
||||
[m1, m2, m3].each { |m|
|
||||
assert_equal(b.width, m.width)
|
||||
assert_equal(m0.height, m.height)
|
||||
assert_equal(a.height, m.height)
|
||||
assert_each_cvscalar(m, 0.001) { |j, i, c|
|
||||
CvScalar.new(expected[c])
|
||||
}
|
||||
}
|
||||
|
||||
assert_raise(TypeError) {
|
||||
m0.solve(b, DUMMY_OBJ)
|
||||
CvMat.solve(DUMMY_OBJ, b)
|
||||
}
|
||||
assert_raise(TypeError) {
|
||||
CvMat.solve(a, DUMMY_OBJ)
|
||||
}
|
||||
assert_raise(TypeError) {
|
||||
CvMat.solve(a, b, DUMMY_OBJ)
|
||||
}
|
||||
end
|
||||
|
||||
|
|
|
@ -118,7 +118,7 @@ class TestPointSet < OpenCVTestCase
|
|||
assert_equal(64, center.y.to_i)
|
||||
assert_in_delta(32.959, circle.radius, 0.001)
|
||||
|
||||
assert_raise(CvStsBadArg) {
|
||||
assert_raise(CvStsBadSize) {
|
||||
@contour2.min_enclosing_circle
|
||||
}
|
||||
end
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue