Merge pull request #63 from timfpark/master

Add absDiff, bitwiseXor, and countNonZero to Matrix operations
This commit is contained in:
Peter Braden 2013-07-30 09:51:55 -07:00
commit 276e42bffc
3 changed files with 71 additions and 1 deletions

View File

@ -58,7 +58,10 @@ Matrix::Init(Handle<Object> 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<Value>
Matrix::AbsDiff(const v8::Arguments& args) {
HandleScope scope;
Matrix *self = ObjectWrap::Unwrap<Matrix>(args.This());
Matrix *src1 = ObjectWrap::Unwrap<Matrix>(args[0]->ToObject());
Matrix *src2 = ObjectWrap::Unwrap<Matrix>(args[1]->ToObject());
cv::absdiff(src1->mat, src2->mat, self->mat);
return scope.Close(v8::Null());
}
Handle<Value>
Matrix::AddWeighted(const v8::Arguments& args) {
HandleScope scope;
@ -786,6 +803,29 @@ Matrix::AddWeighted(const v8::Arguments& args) {
return scope.Close(v8::Null());
}
Handle<Value>
Matrix::BitwiseXor(const v8::Arguments& args) {
HandleScope scope;
Matrix *self = ObjectWrap::Unwrap<Matrix>(args.This());
Matrix *src1 = ObjectWrap::Unwrap<Matrix>(args[0]->ToObject());
Matrix *src2 = ObjectWrap::Unwrap<Matrix>(args[1]->ToObject());
cv::bitwise_xor(src1->mat, src2->mat, self->mat);
return scope.Close(v8::Null());
}
Handle<Value>
Matrix::CountNonZero(const v8::Arguments& args) {
HandleScope scope;
Matrix *self = ObjectWrap::Unwrap<Matrix>(args.This());
double count = (double)cv::countNonZero(self->mat);
return scope.Close(v8::Number::New(count));
}
Handle<Value>
Matrix::Split(const v8::Arguments& args) {

View File

@ -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)

View File

@ -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);
}
}