diff --git a/src/Matrix.cc b/src/Matrix.cc index caf347a..7fc33f4 100755 --- a/src/Matrix.cc +++ b/src/Matrix.cc @@ -107,6 +107,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()); }; @@ -1825,3 +1829,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); +} diff --git a/src/Matrix.h b/src/Matrix.h index af35f19..c3ec0ba 100755 --- a/src/Matrix.h +++ b/src/Matrix.h @@ -97,6 +97,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);