diff --git a/src/Contours.cc b/src/Contours.cc index e702abc..c586b3d 100755 --- a/src/Contours.cc +++ b/src/Contours.cc @@ -29,6 +29,7 @@ Contour::Init(Handle target) { NODE_SET_PROTOTYPE_METHOD(constructor, "area", Area); NODE_SET_PROTOTYPE_METHOD(constructor, "arcLength", ArcLength); NODE_SET_PROTOTYPE_METHOD(constructor, "approxPolyDP", ApproxPolyDP); + NODE_SET_PROTOTYPE_METHOD(constructor, "convexHull", ConvexHull); NODE_SET_PROTOTYPE_METHOD(constructor, "boundingRect", BoundingRect); NODE_SET_PROTOTYPE_METHOD(constructor, "minAreaRect", BoundingRect); NODE_SET_PROTOTYPE_METHOD(constructor, "isConvex", IsConvex); @@ -135,6 +136,23 @@ Contour::ApproxPolyDP(const Arguments &args) { } +Handle +Contour::ConvexHull(const Arguments &args) { + HandleScope scope; + + Contour *self = ObjectWrap::Unwrap(args.This()); + + int pos = args[0]->NumberValue(); + bool clockwise = args[1]->BooleanValue(); + + cv::Mat hull; + cv::convexHull(cv::Mat(self->contours[pos]), hull, clockwise); + hull.copyTo(self->contours[pos]); + + return scope.Close(v8::Null()); +} + + Handle Contour::BoundingRect(const Arguments &args) { HandleScope scope; diff --git a/src/Contours.h b/src/Contours.h index d8b3fa4..c0f8879 100755 --- a/src/Contours.h +++ b/src/Contours.h @@ -20,6 +20,7 @@ class Contour: public node::ObjectWrap { static Handle Area(const v8::Arguments&); static Handle ArcLength(const v8::Arguments&); static Handle ApproxPolyDP(const v8::Arguments&); + static Handle ConvexHull(const v8::Arguments&); static Handle BoundingRect(const v8::Arguments&); static Handle MinAreaRect(const v8::Arguments&); static Handle IsConvex(const v8::Arguments&);