WIP on CamShift with TrackedObject re #22

This commit is contained in:
Peter Braden 2012-11-09 16:48:31 -08:00
parent e4c0ddd4e4
commit 3a1477c527
4 changed files with 104 additions and 0 deletions

View File

@ -9,6 +9,7 @@
, "src/Contours.cc"
, "src/Point.cc"
, "src/VideoCaptureWrap.cc"
, "src/CamShift.cc"
]
, 'libraries': [
'<!@(pkg-config --libs opencv)'

60
src/CamShift.cc Normal file
View File

@ -0,0 +1,60 @@
#include "Camshift.h"
#include "OpenCV.h"
#include "Matrix.h"
Persistent<FunctionTemplate> TrackedObject::constructor;
void
TrackedObject::Init(Handle<Object> target) {
HandleScope scope;
// Constructor
constructor = Persistent<FunctionTemplate>::New(FunctionTemplate::New(TrackedObject::New));
constructor->InstanceTemplate()->SetInternalFieldCount(1);
constructor->SetClassName(String::NewSymbol("TrackedObject"));
// Prototype
//Local<ObjectTemplate> proto = constructor->PrototypeTemplate();
target->Set(String::NewSymbol("TrackedObject"), constructor->GetFunction());
};
Handle<Value>
TrackedObject::New(const Arguments &args) {
HandleScope scope;
if (args.This()->InternalFieldCount() == 0)
return v8::ThrowException(v8::Exception::TypeError(v8::String::New("Cannot Instantiate without new")));
Matrix* m = ObjectWrap::Unwrap<Matrix>(args[0]->ToObject());
cv::Rect r;
TrackedObject *to = new TrackedObject(m->mat, r);
to->Wrap(args.This());
return args.This();
}
TrackedObject::TrackedObject(cv::Mat image, cv::Rect rect){
}
Handle<Value>
TrackedObject::Track(const v8::Arguments& args){
SETUP_FUNCTION(TrackedObject)
if (args.Length() != 1){
v8::ThrowException(v8::Exception::TypeError(v8::String::New("track takes an image param")));
return Undefined();
}
Matrix *im = ObjectWrap::Unwrap<Matrix>(args[0]->ToObject());
cv::RotatedRect r;
r = cv::CamShift(self->prob, self->prev_rect,
cv::TermCriteria(CV_TERMCRIT_EPS | CV_TERMCRIT_ITER, 10, 1));
return Undefined();
}

23
src/CamShift.h Normal file
View File

@ -0,0 +1,23 @@
#include "OpenCV.h"
class TrackedObject: public node::ObjectWrap {
public:
cv::Mat hsv;
cv::Mat hue;
cv::Mat mask;
cv::Mat prob;
//cv::Histogram* hist;
cv::Rect prev_rect;
// cv::Box2D curr_box;
static Persistent<FunctionTemplate> constructor;
static void Init(Handle<Object> target);
static Handle<Value> New(const Arguments &args);
TrackedObject(cv::Mat image, cv::Rect rect);
JSFUNC(Track);
};

View File

@ -257,6 +257,26 @@ vows.describe('Smoke Tests OpenCV').addBatch({
}
, "CamShift" : {
topic : require('../lib/opencv')
, "create TrackedObject" : function(cv){
var im = fs.readFileSync('./examples/mona.png')
, track = new cv.TrackedObject(im, [10,10, 50,50]);
assert.ok(track);
}
, "use TrackedObject.track" : function(cv){
var im = fs.readFileSync('./examples/mona.png')
, im2 = fs.readFileSync('./examples/mona.png')
, tracked = new cv.TrackedObject(im, [10,10, 50,50]);
assert.equal(tracked.track(im2), [10, 10, 50, 50]);
}
}
}).export(module);