diff --git a/src/Contours.cc b/src/Contours.cc index 7d670b34..0977f54f 100755 --- a/src/Contours.cc +++ b/src/Contours.cc @@ -24,6 +24,7 @@ Contour::Init(Handle target) { NODE_SET_PROTOTYPE_METHOD(constructor, "size", Size); + NODE_SET_PROTOTYPE_METHOD(constructor, "cornerCount", CornerCount); NODE_SET_PROTOTYPE_METHOD(constructor, "area", Area); NODE_SET_PROTOTYPE_METHOD(constructor, "arcLength", ArcLength); NODE_SET_PROTOTYPE_METHOD(constructor, "approxPolyDP", ApproxPolyDP); @@ -51,6 +52,9 @@ Contour::Contour(): ObjectWrap() { } +// FIXME: this sould better be called "Length" as ``Contours`` is an Array like structure +// also, this would allow to use ``Size`` for the function returning the number of corners +// in the contour for better consistency with OpenCV. Handle Contour::Size(const Arguments &args) { HandleScope scope; @@ -60,6 +64,15 @@ Contour::Size(const Arguments &args) { return scope.Close(Number::New(self->contours.size())); } +Handle +Contour::CornerCount(const Arguments &args) { + HandleScope scope; + + Contour *self = ObjectWrap::Unwrap(args.This()); + int pos = args[0]->NumberValue(); + + return scope.Close(Number::New(self->contours[pos].size())); +} Handle Contour::Area(const Arguments &args) { @@ -91,7 +104,7 @@ Contour::ApproxPolyDP(const Arguments &args) { Contour *self = ObjectWrap::Unwrap(args.This()); int pos = args[0]->NumberValue(); - bool epsilon = args[1]->NumberValue(); + double epsilon = args[1]->NumberValue(); bool isClosed = args[2]->BooleanValue(); cv::Mat approxed; diff --git a/src/Contours.h b/src/Contours.h index 93031825..1e4c71d9 100755 --- a/src/Contours.h +++ b/src/Contours.h @@ -15,6 +15,7 @@ class Contour: public node::ObjectWrap { //JSFUNC(Size) static Handle Size(const v8::Arguments&); + static Handle CornerCount(const v8::Arguments&); static Handle Area(const v8::Arguments&); static Handle ArcLength(const v8::Arguments&); static Handle ApproxPolyDP(const v8::Arguments&);