mirror of
https://github.com/ruby-opencv/ruby-opencv
synced 2023-03-27 23:22:12 -04:00
add CvMat#draw_chessboard_corners
This commit is contained in:
parent
f8d9ce4a24
commit
08348ff8d3
3 changed files with 83 additions and 0 deletions
|
@ -379,6 +379,8 @@ void define_ruby_class()
|
|||
rb_define_method(rb_klass, "find_contours!", RUBY_METHOD_FUNC(rb_find_contours_bang), -1);
|
||||
rb_define_method(rb_klass, "draw_contours", RUBY_METHOD_FUNC(rb_draw_contours), -1);
|
||||
rb_define_method(rb_klass, "draw_contours!", RUBY_METHOD_FUNC(rb_draw_contours_bang), -1);
|
||||
rb_define_method(rb_klass, "draw_chessboard_corners", RUBY_METHOD_FUNC(rb_draw_chessboard_corners), 3);
|
||||
rb_define_method(rb_klass, "draw_chessboard_corners!", RUBY_METHOD_FUNC(rb_draw_chessboard_corners_bang), 3);
|
||||
rb_define_method(rb_klass, "pyr_segmentation", RUBY_METHOD_FUNC(rb_pyr_segmentation), 3);
|
||||
rb_define_method(rb_klass, "pyr_mean_shift_filtering", RUBY_METHOD_FUNC(rb_pyr_mean_shift_filtering), -1);
|
||||
rb_define_method(rb_klass, "watershed", RUBY_METHOD_FUNC(rb_watershed), 1);
|
||||
|
@ -4916,6 +4918,54 @@ rb_draw_contours_bang(int argc, VALUE *argv, VALUE self)
|
|||
return self;
|
||||
}
|
||||
|
||||
/*
|
||||
* call-seq:
|
||||
* draw_chessboard_corners(pattern_size, corners, pattern_was_found) -> nil
|
||||
*
|
||||
* Returns an image which is rendered the detected chessboard corners.
|
||||
*
|
||||
* pattern_size (CvSize) - Number of inner corners per a chessboard row and column.
|
||||
* corners (Array<CvPoint2D32f>) - Array of detected corners, the output of CvMat#find_chessboard_corners.
|
||||
* pattern_was_found (Boolean)- Parameter indicating whether the complete board was found or not.
|
||||
*/
|
||||
VALUE
|
||||
rb_draw_chessboard_corners(VALUE self, VALUE pattern_size, VALUE corners, VALUE pattern_was_found)
|
||||
{
|
||||
return rb_draw_chessboard_corners_bang(copy(self), pattern_size, corners, pattern_was_found);
|
||||
}
|
||||
|
||||
/*
|
||||
* call-seq:
|
||||
* draw_chessboard_corners!(pattern_size, corners, pattern_was_found) -> self
|
||||
*
|
||||
* Renders the detected chessboard corners.
|
||||
*
|
||||
* pattern_size (CvSize) - Number of inner corners per a chessboard row and column.
|
||||
* corners (Array<CvPoint2D32f>) - Array of detected corners, the output of CvMat#find_chessboard_corners.
|
||||
* pattern_was_found (Boolean)- Parameter indicating whether the complete board was found or not.
|
||||
*/
|
||||
VALUE
|
||||
rb_draw_chessboard_corners_bang(VALUE self, VALUE pattern_size, VALUE corners, VALUE pattern_was_found)
|
||||
{
|
||||
Check_Type(corners, T_ARRAY);
|
||||
int count = RARRAY_LEN(corners);
|
||||
CvPoint2D32f* corners_buff = ALLOCA_N(CvPoint2D32f, count);
|
||||
VALUE* corners_ptr = RARRAY_PTR(corners);
|
||||
for (int i = 0; i < count; i++) {
|
||||
corners_buff[i] = *(CVPOINT2D32F(corners_ptr[i]));
|
||||
}
|
||||
|
||||
try {
|
||||
int found = (pattern_was_found == Qtrue);
|
||||
cvDrawChessboardCorners(CVARR(self), VALUE_TO_CVSIZE(pattern_size), corners_buff, count, found);
|
||||
}
|
||||
catch (cv::Exception& e) {
|
||||
raise_cverror(e);
|
||||
}
|
||||
|
||||
return self;
|
||||
}
|
||||
|
||||
/*
|
||||
* call-seq:
|
||||
* pyr_segmentation(<i>level, threshold1, threshold2</i>) -> [cvmat, cvseq(include cvconnectedcomp)]
|
||||
|
|
|
@ -202,6 +202,8 @@ VALUE rb_find_contours(int argc, VALUE *argv, VALUE self);
|
|||
VALUE rb_find_contours_bang(int argc, VALUE *argv, VALUE self);
|
||||
VALUE rb_draw_contours(int argc, VALUE *argv, VALUE self);
|
||||
VALUE rb_draw_contours_bang(int argc, VALUE *argv, VALUE self);
|
||||
VALUE rb_draw_chessboard_corners(VALUE self, VALUE pattern_size, VALUE corners, VALUE pattern_was_found);
|
||||
VALUE rb_draw_chessboard_corners_bang(VALUE self, VALUE pattern_size, VALUE corners, VALUE pattern_was_found);
|
||||
VALUE rb_pyr_segmentation(VALUE self, VALUE level, VALUE threshold1, VALUE threshold2);
|
||||
VALUE rb_pyr_mean_shift_filtering(int argc, VALUE *argv, VALUE self);
|
||||
VALUE rb_watershed(VALUE self, VALUE markers);
|
||||
|
|
|
@ -289,6 +289,37 @@ class TestCvMat_drawing < OpenCVTestCase
|
|||
# snap ['src', mat0], ['result0', dst0], ['result1', dst1]
|
||||
end
|
||||
|
||||
def test_draw_chessboard_corners
|
||||
mat0 = CvMat.load(FILENAME_CHESSBOARD, 1)
|
||||
mat1 = mat0.clone
|
||||
pattern_size = CvSize.new(4, 4)
|
||||
|
||||
gray = mat1.BGR2GRAY
|
||||
corners, found = gray.find_chessboard_corners(pattern_size)
|
||||
|
||||
mat2 = mat1.draw_chessboard_corners(pattern_size, corners, found)
|
||||
mat1.draw_chessboard_corners!(pattern_size, corners, found)
|
||||
[mat1, mat2].each { |dst|
|
||||
assert_equal(mat0.class, dst.class)
|
||||
assert_equal(mat0.rows, dst.rows)
|
||||
assert_equal(mat0.cols, dst.cols)
|
||||
assert_equal(mat0.depth, dst.depth)
|
||||
}
|
||||
|
||||
assert_raise(TypeError) {
|
||||
mat1.draw_chessboard_corners(DUMMY_OBJ, corners, found)
|
||||
}
|
||||
assert_raise(TypeError) {
|
||||
mat1.draw_chessboard_corners(pattern_size, DUMMY_OBJ, found)
|
||||
}
|
||||
assert_nothing_raised {
|
||||
mat1.draw_chessboard_corners(pattern_size, corners, DUMMY_OBJ)
|
||||
}
|
||||
|
||||
# Uncomment the following line to show the results
|
||||
# snap mat0, mat1, mat2
|
||||
end
|
||||
|
||||
def test_put_text
|
||||
m0 = create_cvmat(240, 320, :cv8u, 3) { CvColor::White }
|
||||
m1 = m0.clone
|
||||
|
|
Loading…
Add table
Reference in a new issue