From 5d34c5990d343c22797a235d916fe406132d01f8 Mon Sep 17 00:00:00 2001 From: John Ludwig Date: Tue, 27 May 2014 20:21:15 -0700 Subject: [PATCH] copy, set, mean with mask operations methods with binary masks applied. created new entry points rather than modifying existing methods to avoid compat issues --- src/Matrix.cc | 54 +++++++++++++++++++++++++++++++++++++++++++++++++++ src/Matrix.h | 4 ++++ 2 files changed, 58 insertions(+) diff --git a/src/Matrix.cc b/src/Matrix.cc index 5b0f960..57e5d60 100755 --- a/src/Matrix.cc +++ b/src/Matrix.cc @@ -106,6 +106,10 @@ Matrix::Init(Handle target) { NODE_SET_METHOD(constructor, "Eye", Eye); + NODE_SET_PROTOTYPE_METHOD(constructor, "copyWithMask", CopyWithMask); + NODE_SET_PROTOTYPE_METHOD(constructor, "setWithMask", SetWithMask); + NODE_SET_PROTOTYPE_METHOD(constructor, "meanWithMask", MeanWithMask); + target->Set(String::NewSymbol("Matrix"), m->GetFunction()); }; @@ -1810,3 +1814,53 @@ Matrix::WarpPerspective(const v8::Arguments& args) { return scope.Close(v8::Null()); } + +Handle +Matrix::CopyWithMask(const v8::Arguments& args) { + SETUP_FUNCTION(Matrix) + + // param 0 - destination image: + Matrix *dest = ObjectWrap::Unwrap(args[0]->ToObject()); + // param 1 - mask. same size as src and dest + Matrix *mask = ObjectWrap::Unwrap(args[1]->ToObject()); + + self->mat.copyTo(dest->mat,mask->mat); + + return scope.Close(Undefined()); +} + + +Handle +Matrix::SetWithMask(const v8::Arguments& args) { + SETUP_FUNCTION(Matrix) + + // param 0 - target value: + Local valArray = args[0]->ToObject(); + cv::Scalar newvals; + newvals.val[0] = valArray->Get(0)->NumberValue(); + newvals.val[1] = valArray->Get(1)->NumberValue(); + newvals.val[2] = valArray->Get(2)->NumberValue(); + + // param 1 - mask. same size as src and dest + Matrix *mask = ObjectWrap::Unwrap(args[1]->ToObject()); + + self->mat.setTo(newvals,mask->mat); + + return scope.Close(Undefined()); +} + +Handle +Matrix::MeanWithMask(const v8::Arguments& args) { + SETUP_FUNCTION(Matrix) + + // param 0 - mask. same size as src and dest + Matrix *mask = ObjectWrap::Unwrap(args[0]->ToObject()); + + cv::Scalar means = cv::mean(self->mat, mask->mat); + v8::Local arr = v8::Array::New(3); + arr->Set(0, Number::New( means[0] )); + arr->Set(1, Number::New( means[1] )); + arr->Set(2, Number::New( means[2] )); + + return scope.Close(arr); +} \ No newline at end of file diff --git a/src/Matrix.h b/src/Matrix.h index 7257093..6bed254 100755 --- a/src/Matrix.h +++ b/src/Matrix.h @@ -96,6 +96,10 @@ class Matrix: public node::ObjectWrap { JSFUNC(PutText) JSFUNC(GetPerspectiveTransform) JSFUNC(WarpPerspective) + + JSFUNC(CopyWithMask) + JSFUNC(SetWithMask) + JSFUNC(MeanWithMask) /* static Handle Val(const Arguments& args); static Handle RowRange(const Arguments& args);