diff --git a/examples/color_filter.js b/examples/color_filter.js new file mode 100644 index 00000000..3cea2e51 --- /dev/null +++ b/examples/color_filter.js @@ -0,0 +1,12 @@ +var cv = require('../lib/opencv'); + +// (B)lue, (G)reen, (R)ed +var lower_threshold = [46, 57, 83]; +var upper_threshold = [80, 96, 115]; + +cv.readImage('./coin1.jpg', function(err, im) { + + im.inRange(lower_threshold, upper_threshold); + im.save('./coin_detected.jpg'); + +}); diff --git a/src/Matrix.cc b/src/Matrix.cc index 76f39cb2..0eab50d4 100755 --- a/src/Matrix.cc +++ b/src/Matrix.cc @@ -62,6 +62,8 @@ Matrix::Init(Handle target) { NODE_SET_PROTOTYPE_METHOD(constructor, "goodFeaturesToTrack", GoodFeaturesToTrack); NODE_SET_PROTOTYPE_METHOD(constructor, "houghLinesP", HoughLinesP); + NODE_SET_PROTOTYPE_METHOD(constructor, "inRange", inRange); + NODE_SET_METHOD(constructor, "Eye", Eye); @@ -795,3 +797,31 @@ Matrix::Resize(const v8::Arguments& args){ return scope.Close(Undefined()); } + + +Handle +Matrix::inRange(const v8::Arguments& args) { + HandleScope scope; + + Matrix *self = ObjectWrap::Unwrap(args.This()); + /*if(self->mat.channels() != 3) + return v8::ThrowException(String::New("Image is no 3-channel"));*/ + + if(args[0]->IsArray() && args[1]->IsArray()) { + Local args_lowerb = args[0]->ToObject(); + Local args_upperb = args[1]->ToObject(); + + cv::Scalar lowerb(0, 0, 0); + cv::Scalar upperb(0, 0, 0); + + lowerb = setColor(args_lowerb); + upperb = setColor(args_upperb); + + cv::Mat mask; + cv::inRange(self->mat, lowerb, upperb, mask); + mask.copyTo(self->mat); + } + + + return scope.Close(v8::Null()); +} diff --git a/src/Matrix.h b/src/Matrix.h index aa61fccd..44354f9d 100755 --- a/src/Matrix.h +++ b/src/Matrix.h @@ -58,6 +58,8 @@ class Matrix: public node::ObjectWrap { JSFUNC(GoodFeaturesToTrack) JSFUNC(HoughLinesP) + JSFUNC(inRange) + /* static Handle Val(const Arguments& args); static Handle RowRange(const Arguments& args);