diff --git a/src/Matrix.cc b/src/Matrix.cc index 8a254b2..8cbc363 100755 --- a/src/Matrix.cc +++ b/src/Matrix.cc @@ -58,7 +58,10 @@ Matrix::Init(Handle target) { NODE_SET_PROTOTYPE_METHOD(constructor, "flip", Flip); NODE_SET_PROTOTYPE_METHOD(constructor, "roi", ROI); NODE_SET_PROTOTYPE_METHOD(constructor, "ptr", Ptr); + NODE_SET_PROTOTYPE_METHOD(constructor, "absDiff", AbsDiff); NODE_SET_PROTOTYPE_METHOD(constructor, "addWeighted", AddWeighted); + NODE_SET_PROTOTYPE_METHOD(constructor, "bitwiseXor", BitwiseXor); + NODE_SET_PROTOTYPE_METHOD(constructor, "countNonZero", CountNonZero); NODE_SET_PROTOTYPE_METHOD(constructor, "split", Split); NODE_SET_PROTOTYPE_METHOD(constructor, "canny", Canny); NODE_SET_PROTOTYPE_METHOD(constructor, "dilate", Dilate); @@ -767,6 +770,20 @@ Matrix::Ptr(const v8::Arguments& args) { // return Undefined(); } +Handle +Matrix::AbsDiff(const v8::Arguments& args) { + HandleScope scope; + + Matrix *self = ObjectWrap::Unwrap(args.This()); + + Matrix *src1 = ObjectWrap::Unwrap(args[0]->ToObject()); + Matrix *src2 = ObjectWrap::Unwrap(args[1]->ToObject()); + + cv::absdiff(src1->mat, src2->mat, self->mat); + + return scope.Close(v8::Null()); +} + Handle Matrix::AddWeighted(const v8::Arguments& args) { HandleScope scope; @@ -786,6 +803,29 @@ Matrix::AddWeighted(const v8::Arguments& args) { return scope.Close(v8::Null()); } +Handle +Matrix::BitwiseXor(const v8::Arguments& args) { + HandleScope scope; + + Matrix *self = ObjectWrap::Unwrap(args.This()); + + Matrix *src1 = ObjectWrap::Unwrap(args[0]->ToObject()); + Matrix *src2 = ObjectWrap::Unwrap(args[1]->ToObject()); + + cv::bitwise_xor(src1->mat, src2->mat, self->mat); + + return scope.Close(v8::Null()); +} + +Handle +Matrix::CountNonZero(const v8::Arguments& args) { + HandleScope scope; + + Matrix *self = ObjectWrap::Unwrap(args.This()); + + double count = (double)cv::countNonZero(self->mat); + return scope.Close(v8::Number::New(count)); +} Handle Matrix::Split(const v8::Arguments& args) { diff --git a/src/Matrix.h b/src/Matrix.h index 5fe490a..3dcb691 100755 --- a/src/Matrix.h +++ b/src/Matrix.h @@ -53,7 +53,10 @@ class Matrix: public node::ObjectWrap { JSFUNC(Flip) JSFUNC(ROI) JSFUNC(Ptr) + JSFUNC(AbsDiff) JSFUNC(AddWeighted) + JSFUNC(BitwiseXor) + JSFUNC(CountNonZero) JSFUNC(Split) JSFUNC(Canny) JSFUNC(Dilate) diff --git a/test/unit.js b/test/unit.js index 91b1512..a9c3058 100755 --- a/test/unit.js +++ b/test/unit.js @@ -190,7 +190,34 @@ vows.describe('Smoke Tests OpenCV').addBatch({ } } - + , ".absDiff and .countNonZero" : function(cv) { + cv.readImage("./examples/mona.png", function(err, im) { + cv.readImage("./examples/mona.png", function(err, im2){ + assert.ok(im); + assert.ok(im2); + + var diff = new cv.Matrix(im.width(), im.height()); + diff.absDiff(im, im2); + + diff.convertGrayscale(); + assert.equal(diff.countNonZero(), 0); + }); + }); + } + + , ".bitwiseXor" : function(cv) { + var mat1 = new cv.Matrix(1,1); + mat1.set(0,0, 1); + + var mat2 = new cv.Matrix(1,1); + mat2.set(0,0, 1); + + var xored = new cv.Matrix(1,1); + xored.bitwiseXor(mat1, mat2); + + assert.equal(xored.get(0,0), 0); + } + }