1
0
Fork 0
mirror of https://github.com/ruby-opencv/ruby-opencv synced 2023-03-27 23:22:12 -04:00
ruby-opencv/ext/opencv/cvcontourtree.cpp
2012-05-09 02:17:18 +09:00

96 lines
2.3 KiB
C++

/************************************************************
cvcontourtree.cpp -
$Author: lsxi $
Copyright (C) 2007 Masakazu Yonekura
************************************************************/
#include "cvcontour.h"
/*
* Document-class: OpenCV::CvContourTree
*
* Contour tree
*
* @see CvContour#create_tree
*/
__NAMESPACE_BEGIN_OPENCV
__NAMESPACE_BEGIN_CVCONTOURTREE
VALUE rb_klass;
VALUE
rb_class()
{
return rb_klass;
}
/*
* Returns the first point of the binary tree root segment
* @overload p1
* @return [CvPoint] First point of the binary tree root segment
*/
VALUE
rb_p1(VALUE self)
{
return REFER_OBJECT(cCvPoint::rb_class(), &CVCONTOURTREE(self)->p1, self);
}
/*
* Returns the last point of the binary tree root segment
* @overload p2
* @return [CvPoint] Last point of the binary tree root segment
*/
VALUE
rb_p2(VALUE self)
{
return REFER_OBJECT(cCvPoint::rb_class(), &CVCONTOURTREE(self)->p2, self);
}
/*
* Restores the contour from its binary tree representation.
*
* The parameter +criteria+ determines the accuracy and/or the number of tree levels
* used for reconstruction, so it is possible to build approximated contour.
* @overload contour(criteria = 0)
* @param criteria [Integer] Criteria, where to stop reconstruction
* @return [CvContour] Contour tree
* @opencv_func cvContourFromContourTree
*/
VALUE
rb_contour(VALUE self, VALUE criteria)
{
VALUE storage = cCvMemStorage::new_object();
CvSeq *contour = NULL;
try {
contour = cvContourFromContourTree(CVCONTOURTREE(self), CVMEMSTORAGE(storage),
VALUE_TO_CVTERMCRITERIA(criteria));
}
catch (cv::Exception& e) {
raise_cverror(e);
}
return cCvSeq::new_sequence(cCvContour::rb_class(), contour, cCvPoint::rb_class(), storage);
}
void
init_ruby_class()
{
#if 0
// For documentation using YARD
VALUE opencv = rb_define_module("OpenCV");
VALUE cvseq = rb_define_class_under(opencv, "CvSeq");
#endif
if (rb_klass)
return;
VALUE opencv = rb_module_opencv();
VALUE cvseq = cCvSeq::rb_class();
rb_klass = rb_define_class_under(opencv, "CvContourTree", cvseq);
rb_define_method(rb_klass, "p1", RUBY_METHOD_FUNC(rb_p1), 0);
rb_define_method(rb_klass, "p2", RUBY_METHOD_FUNC(rb_p2), 0);
rb_define_method(rb_klass, "contour", RUBY_METHOD_FUNC(rb_contour), 1);
}
__NAMESPACE_END_CVCONTOURTREE
__NAMESPACE_END_OPENCV