WIP on images and buffers

This commit is contained in:
Peter Braden 2012-01-20 12:47:21 -08:00
parent 361194e4d8
commit f02ec18e2b
4 changed files with 37 additions and 17 deletions

View File

@ -4,9 +4,9 @@ var cv = require('./lib/opencv')
console.log(cv.version)
//console.log(cv.Image.prototype);
/*
var im = new cv.Image("./examples/test.jpg")
var im = new cv.Image("./examples/t2.jpg")
, face_cascade = new cv.CascadeClassifier("./examples/haarcascade_frontalface_alt.xml")
var faces = face_cascade.detectMultiScale(im, function(err, faces){
@ -17,4 +17,4 @@ var faces = face_cascade.detectMultiScale(im, function(err, faces){
im.save('./out.jpg');
});*/
});

View File

@ -26,6 +26,8 @@ Image::Init(Handle<Object> target) {
NODE_SET_PROTOTYPE_METHOD(constructor, "save", Save);
NODE_SET_PROTOTYPE_METHOD(constructor, "ellipse", Ellipse);
NODE_SET_PROTOTYPE_METHOD(constructor, "toBuffer", ToBuffer);
target->Set(String::NewSymbol("Image"), t->GetFunction());
@ -52,17 +54,18 @@ Image::New(const Arguments &args) {
width = args[0]->Uint32Value();
height = args[1]->Uint32Value();
img = new Image(width, height);
} else {
if (args[0]->IsString()) {
} else if (args[0]->IsString()) {
img = new Image(*args[0]);
} else {
if (Buffer::HasInstance(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);
if (img->mat.empty()){
return v8::ThrowException(v8::Exception::TypeError(v8::String::New("Error loading file")));
}
}
}
img->Wrap(args.This());
return args.This();
@ -75,8 +78,7 @@ Image::Image(int width, int height): ObjectWrap() {
Image::Image(uint8_t* buf, unsigned len): ObjectWrap() {
cv::Mat *mbuf = new cv::Mat(len, 1, CV_8UC1);
cv::Mat *mbuf = new cv::Mat(len, 1, CV_8UC1, buf);
mat = cv::imdecode(*mbuf, -1);
};
@ -119,6 +121,17 @@ Image::Save(const v8::Arguments& args){
}
Handle<Value>
Image::ToBuffer(const v8::Arguments& args){
HandleScope scope;
//Buffer *buf = Buffer::New(mat->length);
//cv::imencode('.jpg', mat, vec, CV_IMWRITE_JPEG_QUALITY 90)
return scope.Close(Number::New(0));
}
// ellipse(x, y, wid, height, angle, startangle, endangle, color, thickness, linetype, shift)
Handle<Value>
Image::Ellipse(const v8::Arguments& args){

View File

@ -19,6 +19,8 @@ class Image: public node::ObjectWrap {
static Handle<Value> Save(const v8::Arguments&);
static Handle<Value> Ellipse(const v8::Arguments&);
static Handle<Value> ToBuffer(const v8::Arguments&);
private:
~Image();
};

View File

@ -83,9 +83,14 @@ vows.describe('Smoke Tests OpenCV').addBatch({
}
, "constructor(buffer)" : function(cv){
assert.ok(new cv.Image(fs.readFileSync('./examples/mona.jpg')));
var im = new cv.Image(fs.readFileSync('./examples/mona.jpg'))
assert.ok(im);
assert.equal(im.width, 500);
assert.equal(im.height, 756)
assert.equal(im.empty(), false)
}
, "inherits from matrix": function(cv){
assert.equal(new cv.Image("./examples/mona.jpg").empty(), false)
}