From c6319937e0001725041a910a9f7d4479890b2af8 Mon Sep 17 00:00:00 2001 From: madshall Date: Wed, 22 Oct 2014 20:16:22 -0400 Subject: [PATCH 1/3] - findContours() fixed - bitwiseAnd(), bitwiseNot(), bitwiseXor() may accept mask as the last argument since now --- src/Matrix.cc | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/src/Matrix.cc b/src/Matrix.cc index 4978953..0ad3045 100755 --- a/src/Matrix.cc +++ b/src/Matrix.cc @@ -1027,7 +1027,12 @@ NAN_METHOD(Matrix::BitwiseXor) { Matrix *src1 = ObjectWrap::Unwrap(args[0]->ToObject()); Matrix *src2 = ObjectWrap::Unwrap(args[1]->ToObject()); - cv::bitwise_xor(src1->mat, src2->mat, self->mat); + if(args.Length() == 3){ + Matrix *mask = ObjectWrap::Unwrap(args[2]->ToObject()); + cv::bitwise_xor(src1->mat, src2->mat, self->mat, mask->mat); + }else{ + cv::bitwise_xor(src1->mat, src2->mat, self->mat); + } NanReturnNull(); } @@ -1039,6 +1044,12 @@ NAN_METHOD(Matrix::BitwiseNot) { Matrix *dst = ObjectWrap::Unwrap(args[0]->ToObject()); + if(args.Length() == 2){ + Matrix *mask = ObjectWrap::Unwrap(args[1]->ToObject()); + cv::bitwise_not(self->mat, dst->mat, mask->mat); + }else{ + cv::bitwise_not(self->mat, dst->mat); + } cv::bitwise_not(self->mat, dst->mat); NanReturnNull(); @@ -1052,7 +1063,12 @@ NAN_METHOD(Matrix::BitwiseAnd) { Matrix *src1 = ObjectWrap::Unwrap(args[0]->ToObject()); Matrix *src2 = ObjectWrap::Unwrap(args[1]->ToObject()); - cv::bitwise_and(src1->mat, src2->mat, self->mat); + if(args.Length() == 3){ + Matrix *mask = ObjectWrap::Unwrap(args[2]->ToObject()); + cv::bitwise_and(src1->mat, src2->mat, self->mat, mask->mat); + }else{ + cv::bitwise_and(src1->mat, src2->mat, self->mat); + } NanReturnNull(); } @@ -1125,7 +1141,11 @@ NAN_METHOD(Matrix::FindContours) { if (args[1]->IsNumber()) chain = args[1]->IntegerValue(); } + Matrix *self = ObjectWrap::Unwrap(args.This()); Local conts_to_return= NanNew(Contour::constructor)->GetFunction()->NewInstance(); + Contour *contours = ObjectWrap::Unwrap(conts_to_return); + + cv::findContours(self->mat, contours->contours, contours->hierarchy, mode, chain); NanReturnValue(conts_to_return); From 4860f875c96ff7631b728bef2d08319fe65076ee Mon Sep 17 00:00:00 2001 From: madshall Date: Wed, 22 Oct 2014 21:26:52 -0400 Subject: [PATCH 2/3] oops, bitwiseNot() hotfix --- src/Matrix.cc | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Matrix.cc b/src/Matrix.cc index 0ad3045..5df1b19 100755 --- a/src/Matrix.cc +++ b/src/Matrix.cc @@ -1050,7 +1050,6 @@ NAN_METHOD(Matrix::BitwiseNot) { }else{ cv::bitwise_not(self->mat, dst->mat); } - cv::bitwise_not(self->mat, dst->mat); NanReturnNull(); } From 23fc1c04edcf6fa20a090a8d6d7c7dd25288ee0c Mon Sep 17 00:00:00 2001 From: Dmitry Ivanov Date: Thu, 23 Oct 2014 15:50:05 -0400 Subject: [PATCH 3/3] HoughCircles added --- src/Matrix.cc | 36 ++++++++++++++++++++++++++++++++++++ src/Matrix.h | 1 + 2 files changed, 37 insertions(+) diff --git a/src/Matrix.cc b/src/Matrix.cc index 5df1b19..4e97c64 100755 --- a/src/Matrix.cc +++ b/src/Matrix.cc @@ -68,6 +68,7 @@ Matrix::Init(Handle target) { NODE_SET_PROTOTYPE_METHOD(ctor, "drawAllContours", DrawAllContours); NODE_SET_PROTOTYPE_METHOD(ctor, "goodFeaturesToTrack", GoodFeaturesToTrack); NODE_SET_PROTOTYPE_METHOD(ctor, "houghLinesP", HoughLinesP); + NODE_SET_PROTOTYPE_METHOD(ctor, "houghCircles", HoughCircles); NODE_SET_PROTOTYPE_METHOD(ctor, "inRange", inRange); NODE_SET_PROTOTYPE_METHOD(ctor, "adjustROI", AdjustROI); NODE_SET_PROTOTYPE_METHOD(ctor, "locateROI", LocateROI); @@ -1257,6 +1258,41 @@ NAN_METHOD(Matrix::HoughLinesP) { } +NAN_METHOD(Matrix::HoughCircles) { + NanScope(); + + Matrix *self = ObjectWrap::Unwrap(args.This()); + + double dp = args.Length() < 1 ? 1 : args[0]->NumberValue(); + double minDist = args.Length() < 2 ? 1 : args[1]->NumberValue(); + double higherThreshold = args.Length() < 3 ? 100 : args[2]->NumberValue(); + double accumulatorThreshold = args.Length() < 4 ? 100 : args[3]->NumberValue(); + int minRadius = args.Length() < 5 ? 0 : args[4]->Uint32Value(); + int maxRadius = args.Length() < 6 ? 0 : args[5]->Uint32Value(); + std::vector circles; + + cv::Mat gray; + + + equalizeHist(self->mat, gray); + + cv::HoughCircles(gray, circles, CV_HOUGH_GRADIENT, dp, minDist, higherThreshold, accumulatorThreshold, minRadius, maxRadius); + + v8::Local arr = NanNew(circles.size()); + + + for (unsigned int i=0; i < circles.size(); i++){ + v8::Local pt = NanNew(3); + pt->Set(0, NanNew((double) circles[i][0]));// center x + pt->Set(1, NanNew((double) circles[i][1]));// center y + pt->Set(2, NanNew((double) circles[i][2]));// radius + arr->Set(i, pt); + } + + NanReturnValue(arr); + +} + cv::Scalar setColor(Local objColor) { Local valB = objColor->Get(0); diff --git a/src/Matrix.h b/src/Matrix.h index 535134f..f041bca 100755 --- a/src/Matrix.h +++ b/src/Matrix.h @@ -74,6 +74,7 @@ class Matrix: public node::ObjectWrap { // Feature Detection JSFUNC(GoodFeaturesToTrack) JSFUNC(HoughLinesP) + JSFUNC(HoughCircles) JSFUNC(Crop)