mirror of
https://github.com/ruby-opencv/ruby-opencv
synced 2023-03-27 23:22:12 -04:00
add Cv::Mat#median_blur
This commit is contained in:
parent
54ab023195
commit
02d8cf8f32
4 changed files with 52 additions and 0 deletions
|
@ -1068,6 +1068,7 @@ namespace rubyopencv {
|
|||
rb_define_method(rb_klass, "cvt_color", RUBY_METHOD_FUNC(rb_cvt_color), -1); // in ext/opencv/mat_imgproc.cpp
|
||||
rb_define_method(rb_klass, "blur", RUBY_METHOD_FUNC(rb_blur), -1); // in ext/opencv/mat_imgproc.cpp
|
||||
rb_define_method(rb_klass, "gaussian_blur", RUBY_METHOD_FUNC(rb_gaussian_blur), -1); // in ext/opencv/mat_imgproc.cpp
|
||||
rb_define_method(rb_klass, "median_blur", RUBY_METHOD_FUNC(rb_median_blur), 1); // in ext/opencv/mat_imgproc.cpp
|
||||
|
||||
rb_define_method(rb_klass, "save", RUBY_METHOD_FUNC(rb_save), -1);
|
||||
|
||||
|
|
|
@ -241,5 +241,29 @@ namespace rubyopencv {
|
|||
|
||||
return mat2obj(dstptr, CLASS_OF(self));
|
||||
}
|
||||
|
||||
/*
|
||||
* Blurs an image using the median filter.
|
||||
*
|
||||
* @overload median_blur(ksize)
|
||||
* @param ksize [Integer] Aperture linear size; it must be odd and greater than 1,
|
||||
* for example: 3, 5, 7 ...
|
||||
* @return [Mat] Output array
|
||||
* @opencv_func cv::medianBlur
|
||||
*/
|
||||
VALUE rb_median_blur(VALUE self, VALUE ksize) {
|
||||
cv::Mat* selfptr = obj2mat(self);
|
||||
cv::Mat* dstptr = NULL;
|
||||
try {
|
||||
dstptr = new cv::Mat();
|
||||
cv::medianBlur(*selfptr, *dstptr, NUM2INT(ksize));
|
||||
}
|
||||
catch (cv::Exception& e) {
|
||||
delete dstptr;
|
||||
Error::raise(e);
|
||||
}
|
||||
|
||||
return mat2obj(dstptr, CLASS_OF(self));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -13,6 +13,7 @@ namespace rubyopencv {
|
|||
VALUE rb_resize(int argc, VALUE *argv, VALUE self);
|
||||
VALUE rb_blur(int argc, VALUE *argv, VALUE self);
|
||||
VALUE rb_gaussian_blur(int argc, VALUE *argv, VALUE self);
|
||||
VALUE rb_median_blur(VALUE self, VALUE ksize);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -211,4 +211,30 @@ class TestCvMat < OpenCVTestCase
|
|||
# w.show(m0.gaussian_blur(ksize, 3, 5, Cv::BORDER_REPLICATE))
|
||||
# Cv::wait_key
|
||||
end
|
||||
|
||||
def test_median_blur
|
||||
m0 = Cv::Mat.ones(3, 3, Cv::CV_8U)
|
||||
m0[1, 1] = Cv::Scalar.new(0)
|
||||
m1 = m0.median_blur(3)
|
||||
|
||||
assert_equal(m0.class, m1.class)
|
||||
assert_equal(m0.rows, m1.rows)
|
||||
assert_equal(m0.cols, m1.cols)
|
||||
assert_equal(m0.depth, m1.depth)
|
||||
assert_equal(m0.dims, m1.dims)
|
||||
assert_equal(m0.channels, m1.channels)
|
||||
m1.rows.times { |r|
|
||||
m1.cols.times { |c|
|
||||
assert_equal(1, m1[r, c][0].to_i)
|
||||
}
|
||||
}
|
||||
|
||||
assert_raise(TypeError) {
|
||||
m0.median_blur(DUMMY_OBJ)
|
||||
}
|
||||
|
||||
# m = Cv::imread(FILENAME_LENA256x256, -1)
|
||||
# m2 = m.median_blur(9)
|
||||
# snap(['Original', m], ['Median blur', m2])
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue