From 4ce14beb967c84cd2e6ac428ef9e75ae165ff982 Mon Sep 17 00:00:00 2001 From: Tim Park Date: Sun, 28 Jul 2013 11:25:01 -0700 Subject: [PATCH 1/5] Add bitwiseXor and absDiff to Matrix operations --- src/Matrix.cc | 29 +++++++++++++++++++++++++++++ src/Matrix.h | 2 ++ 2 files changed, 31 insertions(+) diff --git a/src/Matrix.cc b/src/Matrix.cc index 8a254b2..b93c671 100755 --- a/src/Matrix.cc +++ b/src/Matrix.cc @@ -58,7 +58,9 @@ 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, "split", Split); NODE_SET_PROTOTYPE_METHOD(constructor, "canny", Canny); NODE_SET_PROTOTYPE_METHOD(constructor, "dilate", Dilate); @@ -767,6 +769,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 +802,19 @@ 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::Split(const v8::Arguments& args) { diff --git a/src/Matrix.h b/src/Matrix.h index 5fe490a..5197001 100755 --- a/src/Matrix.h +++ b/src/Matrix.h @@ -53,7 +53,9 @@ class Matrix: public node::ObjectWrap { JSFUNC(Flip) JSFUNC(ROI) JSFUNC(Ptr) + JSFUNC(AbsDiff) JSFUNC(AddWeighted) + JSFUNC(BitwiseXor) JSFUNC(Split) JSFUNC(Canny) JSFUNC(Dilate) From 363b950f1e45a8b98f0277758f7b39166aee37f4 Mon Sep 17 00:00:00 2001 From: Tim Park Date: Mon, 29 Jul 2013 10:48:44 -0700 Subject: [PATCH 2/5] add tests for bitwiseXor and absDiff --- test/unit.js | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/test/unit.js b/test/unit.js index 91b1512..d008508 100755 --- a/test/unit.js +++ b/test/unit.js @@ -190,7 +190,32 @@ vows.describe('Smoke Tests OpenCV').addBatch({ } } - + , ".absDiff" : function(cv){ + var mat1 = new cv.Matrix(1,1); + mat1.set(0,0, 0); + + var mat2 = new cv.Matrix(1,1); + mat2.set(0,0, 1); + + var diff = new cv.Matrix(1,1); + diff.absDiff(mat1, mat2); + + assert.equal(diff.get(0,0), 1); + } + + , ".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); + } + } From d60e3d11d51e5ef4efbda3bc8916dbfcb465d5a3 Mon Sep 17 00:00:00 2001 From: Tim Park Date: Mon, 29 Jul 2013 12:54:38 -0700 Subject: [PATCH 3/5] add countNonZero to Matrix operations --- src/Matrix.cc | 11 +++++++++++ src/Matrix.h | 1 + test/unit.js | 9 +++++++++ 3 files changed, 21 insertions(+) diff --git a/src/Matrix.cc b/src/Matrix.cc index b93c671..8cbc363 100755 --- a/src/Matrix.cc +++ b/src/Matrix.cc @@ -61,6 +61,7 @@ Matrix::Init(Handle target) { 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); @@ -816,6 +817,16 @@ Matrix::BitwiseXor(const v8::Arguments& args) { 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) { HandleScope scope; diff --git a/src/Matrix.h b/src/Matrix.h index 5197001..3dcb691 100755 --- a/src/Matrix.h +++ b/src/Matrix.h @@ -56,6 +56,7 @@ class Matrix: public node::ObjectWrap { 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 d008508..863750c 100755 --- a/test/unit.js +++ b/test/unit.js @@ -216,6 +216,15 @@ vows.describe('Smoke Tests OpenCV').addBatch({ assert.equal(xored.get(0,0), 0); } + , ".countNonZero": function(cv) { + cv.readImage("./examples/mona.png", function(err, im) { + assert.ok(im); + + im.convertGrayscale(); + assert.equal(im.countNonZero(), 378000); + }); + } + } From 6bdaa3a24fc48e9ab05b0fe74fca9be794d0886a Mon Sep 17 00:00:00 2001 From: Tim Park Date: Mon, 29 Jul 2013 13:17:49 -0700 Subject: [PATCH 4/5] combine absDiff and countNonZero tests --- test/unit.js | 29 +++++++++++------------------ 1 file changed, 11 insertions(+), 18 deletions(-) diff --git a/test/unit.js b/test/unit.js index 863750c..7a5159d 100755 --- a/test/unit.js +++ b/test/unit.js @@ -190,17 +190,19 @@ vows.describe('Smoke Tests OpenCV').addBatch({ } } - , ".absDiff" : function(cv){ - var mat1 = new cv.Matrix(1,1); - mat1.set(0,0, 0); + , ".absDiff" : 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 mat2 = new cv.Matrix(1,1); - mat2.set(0,0, 1); + var diff = new cv.Matrix(im.width(), im.height()); + diff.absDiff(im, im2); - var diff = new cv.Matrix(1,1); - diff.absDiff(mat1, mat2); - - assert.equal(diff.get(0,0), 1); + diff.convertGrayscale(); + assert.equal(diff.countNonZero(), 0); + }); + }); } , ".bitwiseXor" : function(cv) { @@ -216,15 +218,6 @@ vows.describe('Smoke Tests OpenCV').addBatch({ assert.equal(xored.get(0,0), 0); } - , ".countNonZero": function(cv) { - cv.readImage("./examples/mona.png", function(err, im) { - assert.ok(im); - - im.convertGrayscale(); - assert.equal(im.countNonZero(), 378000); - }); - } - } From ce742ecce27df6e4aa4eca4fc01e4a2588479e61 Mon Sep 17 00:00:00 2001 From: Tim Park Date: Mon, 29 Jul 2013 13:21:37 -0700 Subject: [PATCH 5/5] rename test to match combined tests --- test/unit.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/unit.js b/test/unit.js index 7a5159d..a9c3058 100755 --- a/test/unit.js +++ b/test/unit.js @@ -190,7 +190,7 @@ vows.describe('Smoke Tests OpenCV').addBatch({ } } - , ".absDiff" : function(cv) { + , ".absDiff and .countNonZero" : function(cv) { cv.readImage("./examples/mona.png", function(err, im) { cv.readImage("./examples/mona.png", function(err, im2){ assert.ok(im);