diff --git a/src/Matrix.cc b/src/Matrix.cc index 76f39cb..22a9ac2 100755 --- a/src/Matrix.cc +++ b/src/Matrix.cc @@ -53,12 +53,13 @@ Matrix::Init(Handle target) { NODE_SET_PROTOTYPE_METHOD(constructor, "addWeighted", AddWeighted); NODE_SET_PROTOTYPE_METHOD(constructor, "split", Split); NODE_SET_PROTOTYPE_METHOD(constructor, "canny", Canny); - NODE_SET_PROTOTYPE_METHOD(constructor, "dilate", Dilate); + NODE_SET_PROTOTYPE_METHOD(constructor, "dilate", Dilate); + NODE_SET_PROTOTYPE_METHOD(constructor, "erode", Erode); NODE_SET_PROTOTYPE_METHOD(constructor, "findContours", FindContours); NODE_SET_PROTOTYPE_METHOD(constructor, "drawContour", DrawContour); NODE_SET_PROTOTYPE_METHOD(constructor, "drawAllContours", DrawAllContours); - + NODE_SET_PROTOTYPE_METHOD(constructor, "goodFeaturesToTrack", GoodFeaturesToTrack); NODE_SET_PROTOTYPE_METHOD(constructor, "houghLinesP", HoughLinesP); @@ -102,7 +103,7 @@ Matrix::Matrix(): ObjectWrap() { Matrix::Matrix(int w, int h): ObjectWrap() { - mat = cv::Mat(w, h, CV_32FC3); + mat = cv::Mat(w, h, CV_32FC3); //TODO:Parametrizar esto //mat = cv::Mat(h, w, CV_8UC3); } @@ -160,7 +161,7 @@ Matrix::Get(const Arguments& args){ } -Handle +Handle Matrix::Set(const Arguments& args){ SETUP_FUNCTION(Matrix) @@ -197,7 +198,7 @@ Matrix::Set(const Arguments& args){ } -Handle +Handle Matrix::Size(const Arguments& args){ SETUP_FUNCTION(Matrix) @@ -208,7 +209,7 @@ Matrix::Size(const Arguments& args){ return scope.Close(arr); } -Handle +Handle Matrix::Row(const Arguments& args){ SETUP_FUNCTION(Matrix) @@ -225,7 +226,7 @@ Matrix::Row(const Arguments& args){ } -Handle +Handle Matrix::PixelRow(const Arguments& args){ SETUP_FUNCTION(Matrix) @@ -244,7 +245,7 @@ Handle return scope.Close(arr); } -Handle +Handle Matrix::Col(const Arguments& args){ SETUP_FUNCTION(Matrix) @@ -260,7 +261,7 @@ Matrix::Col(const Arguments& args){ } -Handle +Handle Matrix::PixelCol(const Arguments& args){ SETUP_FUNCTION(Matrix) @@ -278,21 +279,21 @@ Matrix::PixelCol(const Arguments& args){ return scope.Close(arr); } -Handle +Handle Matrix::Width(const Arguments& args){ SETUP_FUNCTION(Matrix) return scope.Close(Number::New(self->mat.size().width)); } -Handle +Handle Matrix::Height(const Arguments& args){ SETUP_FUNCTION(Matrix) return scope.Close(Number::New(self->mat.size().height)); } -Handle +Handle Matrix::Channels(const Arguments& args){ SETUP_FUNCTION(Matrix) @@ -383,7 +384,7 @@ void AfterAsyncToBufferAsync(uv_work_t *req) { node::Buffer *buf = node::Buffer::New(baton->res.size()); uchar* data = (uchar*) Buffer::Data(buf); memcpy(data, &baton->res[0], baton->res.size()); - + v8::Local globalObj = v8::Context::GetCurrent()->Global(); v8::Local bufferConstructor = v8::Local::Cast(globalObj->Get(v8::String::New("Buffer"))); v8::Handle constructorArgs[3] = {buf->handle_, v8::Integer::New(baton->res.size()), v8::Integer::New(0)}; @@ -402,19 +403,19 @@ void AfterAsyncToBufferAsync(uv_work_t *req) { baton->cb.Dispose(); delete baton; - + // return 0; } -Handle +Handle Matrix::Ellipse(const v8::Arguments& args){ SETUP_FUNCTION(Matrix) int x = args[0]->Uint32Value(); int y = args[1]->Uint32Value(); int width = args[2]->Uint32Value(); - int height = args[3]->Uint32Value(); + int height = args[3]->Uint32Value(); cv::Scalar color(0, 0, 255); if(args[4]->IsArray()) { @@ -447,7 +448,7 @@ Matrix::Rectangle(const Arguments& args) { Local objColor = args[2]->ToObject(); color = setColor(objColor); } - + int x = xy->Get(0)->IntegerValue(); int y = xy->Get(1)->IntegerValue(); @@ -480,7 +481,7 @@ Matrix::Line(const Arguments& args) { Local objColor = args[2]->ToObject(); color = setColor(objColor); } - + int x1 = xy1->Get(0)->IntegerValue(); int y1 = xy1->Get(1)->IntegerValue(); @@ -512,7 +513,7 @@ Matrix::Save(const v8::Arguments& args){ } -Handle +Handle Matrix::Eye(const v8::Arguments& args){ HandleScope scope; @@ -610,7 +611,7 @@ Matrix::AddWeighted(const v8::Arguments& args) { int gamma = 0; cv::addWeighted(src1->mat, alpha, src2->mat, beta, gamma, self->mat); - + return scope.Close(v8::Null()); } @@ -652,6 +653,18 @@ Matrix::Dilate(const v8::Arguments& args) { return scope.Close(v8::Null()); } +Handle +Matrix::Erode(const v8::Arguments& args) { + HandleScope scope; + + Matrix *self = ObjectWrap::Unwrap(args.This()); + int niters = args[0]->NumberValue(); + + cv::erode(self->mat, self->mat, cv::Mat(), cv::Point(-1, -1), niters); + + return scope.Close(v8::Null()); +} + Handle Matrix::FindContours(const v8::Arguments& args) { @@ -715,14 +728,14 @@ Matrix::GoodFeaturesToTrack(const v8::Arguments& args) { Matrix *self = ObjectWrap::Unwrap(args.This()); std::vector corners; - + cv::Mat gray; cvtColor(self->mat, gray, CV_BGR2GRAY); equalizeHist(gray, gray); cv::goodFeaturesToTrack(gray, corners, 500, 0.01, 10); - + v8::Local arr = v8::Array::New(corners.size()); @@ -743,14 +756,14 @@ Matrix::HoughLinesP(const v8::Arguments& args) { Matrix *self = ObjectWrap::Unwrap(args.This()); std::vector lines; - + cv::Mat gray; equalizeHist(self->mat, gray); // cv::Canny(gray, gray, 50, 200, 3); cv::HoughLinesP(gray, lines, 1, CV_PI/180, 80, 30, 10); - + v8::Local arr = v8::Array::New(lines.size()); diff --git a/src/Matrix.h b/src/Matrix.h index aa61fcc..eb51eed 100755 --- a/src/Matrix.h +++ b/src/Matrix.h @@ -2,12 +2,12 @@ class Matrix: public node::ObjectWrap { public: - + cv::Mat mat; static Persistent constructor; static void Init(Handle target); static Handle New(const Arguments &args); - Matrix(); + Matrix(); Matrix(cv::Mat other, cv::Rect roi); Matrix(int rows, int cols); Matrix(int rows, int cols, int typ); @@ -36,7 +36,7 @@ class Matrix: public node::ObjectWrap { JSFUNC(Save) JSFUNC(ToBuffer) - + JSFUNC(ToBufferAsync) JSFUNC(Resize) @@ -49,6 +49,7 @@ class Matrix: public node::ObjectWrap { JSFUNC(Split) JSFUNC(Canny) JSFUNC(Dilate) + JSFUNC(Erode) JSFUNC(FindContours) JSFUNC(DrawContour) @@ -87,8 +88,8 @@ class Matrix: public node::ObjectWrap { static Handle Depth(const Arguments& args); static Handle Channels(const Arguments& args); static Handle StepOne(const Arguments& args); - - + + */ };