From b038343ad40f7a109ee92aef6a963a013ae0f0f2 Mon Sep 17 00:00:00 2001 From: Peter Braden Date: Thu, 19 Jan 2012 22:39:05 -0800 Subject: [PATCH] WIP on image from buffer --- smoketest.js | 4 ++-- src/Image.cc | 19 +++++++++++++++---- src/Image.h | 5 ++--- src/OpenCV.h | 1 + 4 files changed, 20 insertions(+), 9 deletions(-) diff --git a/smoketest.js b/smoketest.js index 2138f0d..a87cd49 100755 --- a/smoketest.js +++ b/smoketest.js @@ -4,7 +4,7 @@ var cv = require('./lib/opencv') console.log(cv.version) -var im = new cv.Image("./examples/mona.jpg") +var im = new cv.Image("./examples/test.jpg") , face_cascade = new cv.CascadeClassifier("./examples/haarcascade_frontalface_alt.xml") var faces = face_cascade.detectMultiScale(im, function(err, faces){ @@ -15,4 +15,4 @@ var faces = face_cascade.detectMultiScale(im, function(err, faces){ im.save('./out.jpg'); -}, 1.1, 2, [30, 30]); \ No newline at end of file +}); \ No newline at end of file diff --git a/src/Image.cc b/src/Image.cc index 631017f..ecbf881 100644 --- a/src/Image.cc +++ b/src/Image.cc @@ -22,7 +22,6 @@ Image::Init(Handle target) { NODE_SET_PROTOTYPE_METHOD(constructor, "save", Save); NODE_SET_PROTOTYPE_METHOD(constructor, "ellipse", Ellipse); - /*proto->SetAccessor(String::NewSymbol("source"), GetSource, SetSource); proto->SetAccessor(String::NewSymbol("complete"), GetComplete); @@ -48,7 +47,15 @@ Image::New(const Arguments &args) { height = args[1]->Uint32Value(); img = new Image(width, height); } else { - img = new Image(*args[0]); + if (args[0]->IsString()) { + img = new Image(*args[0]); + } else { + if (Buffer::HasInstance(args[0])){ + uint8_t *buf = (uint8_t *) Buffer::Data(args[0]->ToObject()); + unsigned len = Buffer::Length(args[0]->ToObject()); + img = new Image(buf, len); + } + } } img->Wrap(args.This()); @@ -56,11 +63,15 @@ Image::New(const Arguments &args) { }; + Image::Image(int width, int height): ObjectWrap() { }; -Image::Image(cv::Mat m): ObjectWrap() { - mat = m; + +Image::Image(uint8_t* buf, unsigned len): ObjectWrap() { + cv::Mat *mbuf = new cv::Mat(len, 1, CV_8UC1); + + mat = cv::imdecode(*mbuf, -1); }; diff --git a/src/Image.h b/src/Image.h index 080f109..cc7eb61 100644 --- a/src/Image.h +++ b/src/Image.h @@ -11,9 +11,8 @@ class Image: public node::ObjectWrap { Image(int width, int height); Image(v8::Value* src); - Image(cv::Mat m); - - + Image(uint8_t* buf, unsigned len); + static Handle GetWidth(Local prop, const AccessorInfo &info); static Handle GetHeight(Local prop, const AccessorInfo &info); diff --git a/src/OpenCV.h b/src/OpenCV.h index 0c3d09f..71dfea8 100644 --- a/src/OpenCV.h +++ b/src/OpenCV.h @@ -5,6 +5,7 @@ #include #include #include +#include #include #include #include