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
2011-07-31 00:37:45 +09:00

91 lines
2.1 KiB
C++

/************************************************************
cvcontourtree.cpp -
$Author: lsxi $
Copyright (C) 2007 Masakazu Yonekura
************************************************************/
#include "cvcontour.h"
/*
* Document-class: OpenCV::CvContourTree
*
* Contour tree. CvContour#create_tree
*
* C structure is here.
* typedef struct CvContourTree {
* CV_SEQUENCE_FIELDS()
* CvPoint p1;
* CvPoint p2;
* } CvContourTree;
*
*/
__NAMESPACE_BEGIN_OPENCV
__NAMESPACE_BEGIN_CVCONTOURTREE
VALUE rb_klass;
VALUE
rb_class()
{
return rb_klass;
}
void
define_ruby_class()
{
if (rb_klass)
return;
/*
* opencv = rb_define_module("OpenCV");
* cvseq = rb_define_class_under(opencv, "CvSeq");
*
* note: this comment is used by rdoc.
*/
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);
}
VALUE
rb_p1(VALUE self)
{
return REFER_OBJECT(cCvPoint::rb_class(), &CVCONTOURTREE(self)->p1, self);
}
VALUE
rb_p2(VALUE self)
{
return REFER_OBJECT(cCvPoint::rb_class(), &CVCONTOURTREE(self)->p2, self);
}
/*
* call-seq:
* contour(<i>[criteria = 0]</i>) -> cvcontour
*
* 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.
*/
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);
}
__NAMESPACE_END_CVCONTOURTREE
__NAMESPACE_END_OPENCV