Skip to content

Commit 87d1a02

Browse files
committed
Merge pull request #3 from peterbraden/master
[20160423] sync to upstream/master
2 parents 2273e55 + 13a1de4 commit 87d1a02

File tree

3 files changed

+57
-2
lines changed

3 files changed

+57
-2
lines changed

src/Matrix.cc

Lines changed: 32 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -106,9 +106,11 @@ void Matrix::Init(Local<Object> target) {
106106
Nan::SetPrototypeMethod(ctor, "copyWithMask", CopyWithMask);
107107
Nan::SetPrototypeMethod(ctor, "setWithMask", SetWithMask);
108108
Nan::SetPrototypeMethod(ctor, "meanWithMask", MeanWithMask);
109+
Nan::SetPrototypeMethod(ctor, "mean", Mean);
109110
Nan::SetPrototypeMethod(ctor, "shift", Shift);
110111
Nan::SetPrototypeMethod(ctor, "reshape", Reshape);
111112
Nan::SetPrototypeMethod(ctor, "release", Release);
113+
Nan::SetPrototypeMethod(ctor, "subtract", Subtract);
112114

113115
target->Set(Nan::New("Matrix").ToLocalChecked(), ctor->GetFunction());
114116
};
@@ -982,7 +984,7 @@ class AsyncSaveWorker: public Nan::AsyncWorker {
982984

983985
private:
984986
Matrix* matrix;
985-
char* filename;
987+
std::string filename;
986988
int res;
987989
};
988990

@@ -2483,10 +2485,24 @@ NAN_METHOD(Matrix::MeanWithMask) {
24832485
Matrix *mask = Nan::ObjectWrap::Unwrap<Matrix>(info[0]->ToObject());
24842486

24852487
cv::Scalar means = cv::mean(self->mat, mask->mat);
2486-
v8::Local < v8::Array > arr = Nan::New<Array>(3);
2488+
v8::Local < v8::Array > arr = Nan::New<Array>(4);
24872489
arr->Set(0, Nan::New<Number>(means[0]));
24882490
arr->Set(1, Nan::New<Number>(means[1]));
24892491
arr->Set(2, Nan::New<Number>(means[2]));
2492+
arr->Set(3, Nan::New<Number>(means[3]));
2493+
2494+
info.GetReturnValue().Set(arr);
2495+
}
2496+
2497+
NAN_METHOD(Matrix::Mean) {
2498+
SETUP_FUNCTION(Matrix)
2499+
2500+
cv::Scalar means = cv::mean(self->mat);
2501+
v8::Local<v8::Array> arr = Nan::New<Array>(4);
2502+
arr->Set(0, Nan::New<Number>(means[0]));
2503+
arr->Set(1, Nan::New<Number>(means[1]));
2504+
arr->Set(2, Nan::New<Number>(means[2]));
2505+
arr->Set(3, Nan::New<Number>(means[3]));
24902506

24912507
info.GetReturnValue().Set(arr);
24922508
}
@@ -2569,3 +2585,17 @@ NAN_METHOD(Matrix::Release) {
25692585

25702586
return;
25712587
}
2588+
2589+
NAN_METHOD(Matrix::Subtract) {
2590+
SETUP_FUNCTION(Matrix)
2591+
2592+
if (info.Length() < 1) {
2593+
Nan::ThrowTypeError("Invalid number of arguments");
2594+
}
2595+
2596+
Matrix *other = Nan::ObjectWrap::Unwrap<Matrix>(info[0]->ToObject());
2597+
2598+
self->mat -= other->mat;
2599+
2600+
return;
2601+
}

src/Matrix.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,10 +121,13 @@ class Matrix: public node_opencv::Matrix{
121121
JSFUNC(CopyWithMask)
122122
JSFUNC(SetWithMask)
123123
JSFUNC(MeanWithMask)
124+
JSFUNC(Mean)
124125
JSFUNC(Shift)
125126
JSFUNC(Reshape)
126127

127128
JSFUNC(Release)
129+
130+
JSFUNC(Subtract)
128131
/*
129132
static Handle<Value> Val(const Arguments& info);
130133
static Handle<Value> RowRange(const Arguments& info);

test/unit.js

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -341,6 +341,28 @@ test('Native Matrix', function(assert) {
341341
assert.end();
342342
})
343343

344+
test('Subtract', function(assert) {
345+
var a = new cv.Matrix.Zeros(1,1);
346+
a.set(0, 0, 3);
347+
var b = new cv.Matrix.Zeros(1,1);
348+
b.set(0, 0, 1);
349+
a.subtract(b);
350+
assert.deepEqual(a.get(0, 0), 2);
351+
assert.end();
352+
});
353+
354+
test('Mean', function(assert) {
355+
var a = new cv.Matrix.Zeros(2, 2, cv.Constants.CV_8UC3);
356+
357+
// Set [0, 0] element to 1 for all three channels
358+
a.set(0, 0, 1, 0);
359+
a.set(0, 0, 1, 1);
360+
a.set(0, 0, 1, 2);
361+
362+
var means = a.mean();
363+
assert.deepEqual(means, [0.25, 0.25, 0.25, 0]);
364+
assert.end();
365+
});
344366

345367
// Test the examples folder.
346368
require('./examples')()

0 commit comments

Comments
 (0)