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#median_blur

This commit is contained in:
ser1zw 2016-05-01 23:59:24 +09:00
parent 54ab023195
commit 02d8cf8f32
4 changed files with 52 additions and 0 deletions

View file

@ -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);

View file

@ -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));
}
}
}

View file

@ -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);
}
}

View file

@ -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