1
0
Fork 0
mirror of https://github.com/ruby-opencv/ruby-opencv synced 2023-03-27 23:22:12 -04:00

add Cv::Mat#absdiff

This commit is contained in:
ser1zw 2016-07-21 22:04:51 +09:00
parent a9eb8fbe64
commit 583544e74f
2 changed files with 63 additions and 0 deletions

View file

@ -824,6 +824,42 @@ namespace rubyopencv {
return mat2obj(retptr, CLASS_OF(self));
}
/*
* Calculates the per-element absolute difference between two
* or between an array and a scalar.
*
* @overload absdiff(other)
* @param other [Mat, Scalar] Input array or scalar
* @return [Mat] Output array that has the same size and type as input arrays.
* @opencv_func cv::absdiff
*/
VALUE rb_absdiff(VALUE self, VALUE other) {
cv::Mat* selfptr = obj2mat(self);
cv::Mat* retptr = NULL;
try {
retptr = new cv::Mat();
if (rb_obj_is_kind_of(other, rb_klass)) {
cv::Mat* tmp = obj2mat(other);
cv::absdiff(*selfptr, *tmp, *retptr);
}
else if (rb_obj_is_kind_of(other, Scalar::klass())) {
cv::Scalar* tmp = Scalar::obj2scalar(other);
cv::absdiff(*selfptr, *tmp, *retptr);
}
else {
rb_raise(rb_eTypeError, "no implicit conversion of %s into Cv::Mat or Cv::Scalar",
rb_obj_classname(other));
}
}
catch (cv::Exception& e) {
Error::raise(e);
delete retptr;
}
return mat2obj(retptr, CLASS_OF(self));
}
/*
* Extracts a diagonal from a matrix.
*
@ -1171,6 +1207,7 @@ namespace rubyopencv {
rb_define_alias(rb_klass, "^", "bitwise_xor");
rb_define_method(rb_klass, "bitwise_not", RUBY_METHOD_FUNC(rb_bitwise_not), -1);
rb_define_alias(rb_klass, "~", "bitwise_not");
rb_define_method(rb_klass, "absdiff", RUBY_METHOD_FUNC(rb_absdiff), 1);
rb_define_method(rb_klass, "diag", RUBY_METHOD_FUNC(rb_diag), -1);
rb_define_method(rb_klass, "dot", RUBY_METHOD_FUNC(rb_dot), 1);
rb_define_method(rb_klass, "cross", RUBY_METHOD_FUNC(rb_cross), 1);