From e8cc061187c7c9a71855c3879bc64d4dfec1ecde Mon Sep 17 00:00:00 2001 From: Peter Braden Date: Wed, 19 Sep 2012 16:35:04 -0700 Subject: [PATCH] hough lines --- smoketest.js | 11 ++++++--- src/Matrix.cc | 64 +++++++++++++++++++++++++++++++++++++++++++++++++++ src/Matrix.h | 3 +++ 3 files changed, 75 insertions(+), 3 deletions(-) diff --git a/smoketest.js b/smoketest.js index 50ea037..a5f3f2a 100755 --- a/smoketest.js +++ b/smoketest.js @@ -18,11 +18,16 @@ new cv.VideoCapture(0).read(function(mat){ */ -cv.readImage("./examples/mona.png", function(err, im){ - var features = im.goodFeaturesToTrack(); +cv.readImage("./examples/stuff.png", function(err, im){ + var i2 = im.copy() + i2.convertGrayscale() + i2.canny(5, 300) + var features = i2.houghLinesP(); for (var i=0;i target) { NODE_SET_PROTOTYPE_METHOD(constructor, "toBuffer", ToBuffer); NODE_SET_PROTOTYPE_METHOD(constructor, "ellipse", Ellipse); NODE_SET_PROTOTYPE_METHOD(constructor, "rectangle", Rectangle); + NODE_SET_PROTOTYPE_METHOD(constructor, "line", Line); NODE_SET_PROTOTYPE_METHOD(constructor, "save", Save); NODE_SET_PROTOTYPE_METHOD(constructor, "resize", Resize); NODE_SET_PROTOTYPE_METHOD(constructor, "channels", Channels); @@ -58,6 +59,7 @@ Matrix::Init(Handle target) { NODE_SET_PROTOTYPE_METHOD(constructor, "drawAllContours", DrawAllContours); NODE_SET_PROTOTYPE_METHOD(constructor, "goodFeaturesToTrack", GoodFeaturesToTrack); + NODE_SET_PROTOTYPE_METHOD(constructor, "houghLinesP", HoughLinesP); NODE_SET_METHOD(constructor, "Eye", Eye); @@ -346,6 +348,39 @@ Matrix::Rectangle(const Arguments& args) { return scope.Close(v8::Null()); } +Handle +Matrix::Line(const Arguments& args) { + SETUP_FUNCTION(Matrix) + + + if(args[0]->IsArray() && args[1]->IsArray()) { + Local xy1 = args[0]->ToObject(); + Local xy2 = args[1]->ToObject(); + + cv::Scalar color(0, 0, 255); + + if(args[2]->IsArray()) { + Local objColor = args[2]->ToObject(); + color = setColor(objColor); + } + + int x1 = xy1->Get(0)->IntegerValue(); + int y1 = xy1->Get(1)->IntegerValue(); + + int x2 = xy2->Get(0)->IntegerValue(); + int y2 = xy2->Get(1)->IntegerValue(); + + int thickness = 1; + + if(args[3]->IntegerValue()) + thickness = args[3]->IntegerValue(); + + cv::line(self->mat, cv::Point(x1, y1), cv::Point(x2, y2), color, thickness); + } + + return scope.Close(v8::Null()); +} + Handle Matrix::Save(const v8::Arguments& args){ HandleScope scope; @@ -585,6 +620,35 @@ Matrix::GoodFeaturesToTrack(const v8::Arguments& args) { } +Handle +Matrix::HoughLinesP(const v8::Arguments& args) { + HandleScope scope; + + 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()); + + + for (unsigned int i=0; i pt = v8::Array::New(4); + pt->Set(0, Number::New((double) lines[i][0])); + pt->Set(1, Number::New((double) lines[i][1])); + pt->Set(2, Number::New((double) lines[i][2])); + pt->Set(3, Number::New((double) lines[i][3])); + arr->Set(i, pt); + } + + return scope.Close(arr); + +} cv::Scalar setColor(Local objColor) { diff --git a/src/Matrix.h b/src/Matrix.h index be16fbf..8aba181 100755 --- a/src/Matrix.h +++ b/src/Matrix.h @@ -66,6 +66,7 @@ class Matrix: public node::ObjectWrap { JSFUNC(ToBuffer) JSFUNC(Ellipse) JSFUNC(Rectangle) + JSFUNC(Line) JSFUNC(Empty) JSFUNC(Save) @@ -84,7 +85,9 @@ class Matrix: public node::ObjectWrap { JSFUNC(DrawContour) JSFUNC(DrawAllContours) + // Feature Detection JSFUNC(GoodFeaturesToTrack) + JSFUNC(HoughLinesP) };