mirror of
https://github.com/peterbraden/node-opencv.git
synced 2025-12-08 19:45:55 +00:00
OpenCV Bindings - initial commit
This commit is contained in:
commit
403a62dbba
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
build
|
||||||
|
.lock-wscript
|
||||||
BIN
examples/mona.jpg
Normal file
BIN
examples/mona.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 3.3 MiB |
10
lib/bindings.js
Normal file
10
lib/bindings.js
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
module.exports = require('../build/Release/opencv.node');
|
||||||
|
|
||||||
|
|
||||||
|
try {
|
||||||
|
module.exports = require('../build/Release/opencv.node');
|
||||||
|
} catch (e) { try {
|
||||||
|
module.exports = require('../build/default/opencv.node');
|
||||||
|
} catch (e) {
|
||||||
|
throw e;
|
||||||
|
}}
|
||||||
5
lib/opencv.js
Normal file
5
lib/opencv.js
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
var opencv = require('./bindings')
|
||||||
|
, Point = opencv.Point
|
||||||
|
, Image = opencv.Image
|
||||||
|
|
||||||
|
var oc = exports = module.exports = opencv;
|
||||||
4
smoke.sh
Executable file
4
smoke.sh
Executable file
@ -0,0 +1,4 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
node-waf configure && node-waf build && echo '-- Compiled OK --
|
||||||
|
|
||||||
|
' && node smoketest
|
||||||
14
smoketest.js
Normal file
14
smoketest.js
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
var opencv = require('./lib/opencv')
|
||||||
|
, assert = require('assert')
|
||||||
|
|
||||||
|
assert.ok(!!opencv)
|
||||||
|
assert.ok(!!opencv.Point)
|
||||||
|
assert.ok(!!new opencv.Point(1, 2))
|
||||||
|
assert.equal(new opencv.Point(1, 2).x, 1)
|
||||||
|
assert.equal(new opencv.Point(1, 2).y, 2)
|
||||||
|
assert.equal(Math.round(new opencv.Point(1.1, 2).x * 100), 110)
|
||||||
|
assert.equal(Math.round(new opencv.Point(1.2, 2.75).y *100), 275)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
console.log(opencv.Image("./examples/mona.jpg"))
|
||||||
57
src/Image.cc
Normal file
57
src/Image.cc
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
#include "Image.h"
|
||||||
|
#include "OpenCV.h"
|
||||||
|
|
||||||
|
v8::Persistent<FunctionTemplate> Image::constructor;
|
||||||
|
|
||||||
|
void
|
||||||
|
Image::Init(Handle<Object> target) {
|
||||||
|
HandleScope scope;
|
||||||
|
|
||||||
|
// Constructor
|
||||||
|
constructor = Persistent<FunctionTemplate>::New(FunctionTemplate::New(Image::New));
|
||||||
|
constructor->InstanceTemplate()->SetInternalFieldCount(1);
|
||||||
|
constructor->SetClassName(String::NewSymbol("Image"));
|
||||||
|
|
||||||
|
// Prototype
|
||||||
|
Local<ObjectTemplate> proto = constructor->PrototypeTemplate();
|
||||||
|
|
||||||
|
|
||||||
|
/*proto->SetAccessor(String::NewSymbol("source"), GetSource, SetSource);
|
||||||
|
proto->SetAccessor(String::NewSymbol("complete"), GetComplete);
|
||||||
|
proto->SetAccessor(String::NewSymbol("width"), GetWidth);
|
||||||
|
proto->SetAccessor(String::NewSymbol("height"), GetHeight);
|
||||||
|
proto->SetAccessor(String::NewSymbol("onload"), GetOnload, SetOnload);
|
||||||
|
proto->SetAccessor(String::NewSymbol("onerror"), GetOnerror, SetOnerror);*/
|
||||||
|
target->Set(String::NewSymbol("Image"), constructor->GetFunction());
|
||||||
|
};
|
||||||
|
|
||||||
|
Handle<Value>
|
||||||
|
Image::New(const Arguments &args) {
|
||||||
|
Image *img;
|
||||||
|
int width, height;
|
||||||
|
|
||||||
|
|
||||||
|
if (args[0]->IsNumber() && args[1]->IsNumber()){
|
||||||
|
width = args[0]->Uint32Value();
|
||||||
|
height = args[1]->Uint32Value();
|
||||||
|
img = new Image(width, height);
|
||||||
|
} else {
|
||||||
|
img = new Image(*args[0]);
|
||||||
|
}
|
||||||
|
|
||||||
|
img->Wrap(args.This());
|
||||||
|
return args.This();
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Image::Image(int width, int height): ObjectWrap() {
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
Image::Image(v8::Value* fileName): ObjectWrap() {
|
||||||
|
char * fname = fileName->ToString()->Utf8Value();
|
||||||
|
image = cvLoadImage(fname);
|
||||||
|
};
|
||||||
|
|
||||||
16
src/Image.h
Normal file
16
src/Image.h
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
#include "OpenCV.h"
|
||||||
|
|
||||||
|
class Image: public node::ObjectWrap {
|
||||||
|
public:
|
||||||
|
IplImage* image;
|
||||||
|
static Persistent<FunctionTemplate> constructor;
|
||||||
|
static void Init(Handle<Object> target);
|
||||||
|
static Handle<Value> New(const Arguments &args);
|
||||||
|
|
||||||
|
Image(int width, int height);
|
||||||
|
Image(v8::Value* src);
|
||||||
|
|
||||||
|
|
||||||
|
static Handle<Value> GetWidth(Local<String> prop, const AccessorInfo &info);
|
||||||
|
static Handle<Value> GetHeight(Local<String> prop, const AccessorInfo &info);
|
||||||
|
};
|
||||||
8
src/OpenCV.cc
Normal file
8
src/OpenCV.cc
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
#include "OpenCV.h"
|
||||||
|
|
||||||
|
void
|
||||||
|
OpenCV::Init(Handle<Object> target) {
|
||||||
|
HandleScope scope;
|
||||||
|
|
||||||
|
target->Set(String::NewSymbol("version"), String::New("1"));
|
||||||
|
}
|
||||||
21
src/OpenCV.h
Normal file
21
src/OpenCV.h
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
#ifndef __NODE_OPENCV_H__
|
||||||
|
#define __NODE_OPENCV_H__
|
||||||
|
|
||||||
|
#include <v8.h>
|
||||||
|
#include <node.h>
|
||||||
|
#include <node_object_wrap.h>
|
||||||
|
#include <node_version.h>
|
||||||
|
#include <cv.h>
|
||||||
|
|
||||||
|
using namespace v8;
|
||||||
|
using namespace node;
|
||||||
|
|
||||||
|
|
||||||
|
class OpenCV: public node::ObjectWrap{
|
||||||
|
public:
|
||||||
|
static void Init(Handle<Object> target);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
59
src/Point.cc
Normal file
59
src/Point.cc
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
#include "Point.h"
|
||||||
|
#include "OpenCV.h"
|
||||||
|
|
||||||
|
v8::Persistent<FunctionTemplate> Point::constructor;
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
Point::Init(Handle<Object> target) {
|
||||||
|
HandleScope scope;
|
||||||
|
|
||||||
|
// Constructor
|
||||||
|
constructor = Persistent<FunctionTemplate>::New(FunctionTemplate::New(Point::New));
|
||||||
|
constructor->InstanceTemplate()->SetInternalFieldCount(1);
|
||||||
|
constructor->SetClassName(String::NewSymbol("Point"));
|
||||||
|
|
||||||
|
// Prototype
|
||||||
|
Local<ObjectTemplate> proto = constructor->PrototypeTemplate();
|
||||||
|
proto->SetAccessor(String::NewSymbol("x"), GetX);
|
||||||
|
proto->SetAccessor(String::NewSymbol("y"), GetY);
|
||||||
|
|
||||||
|
|
||||||
|
/*proto->SetAccessor(String::NewSymbol("source"), GetSource, SetSource);
|
||||||
|
proto->SetAccessor(String::NewSymbol("complete"), GetComplete);
|
||||||
|
proto->SetAccessor(String::NewSymbol("width"), GetWidth);
|
||||||
|
proto->SetAccessor(String::NewSymbol("height"), GetHeight);
|
||||||
|
proto->SetAccessor(String::NewSymbol("onload"), GetOnload, SetOnload);
|
||||||
|
proto->SetAccessor(String::NewSymbol("onerror"), GetOnerror, SetOnerror);*/
|
||||||
|
target->Set(String::NewSymbol("Point"), constructor->GetFunction());
|
||||||
|
};
|
||||||
|
|
||||||
|
Handle<Value>
|
||||||
|
Point::New(const Arguments &args) {
|
||||||
|
HandleScope scope;
|
||||||
|
double x = 0, y = 0;
|
||||||
|
if (args[0]->IsNumber()) x = args[0]->NumberValue();
|
||||||
|
if (args[1]->IsNumber()) y = args[1]->NumberValue();
|
||||||
|
Point *pt = new Point(x, y);
|
||||||
|
pt->Wrap(args.This());
|
||||||
|
return args.This();
|
||||||
|
}
|
||||||
|
|
||||||
|
Handle<Value>
|
||||||
|
Point::GetX(Local<String> prop, const AccessorInfo &info) {
|
||||||
|
HandleScope scope;
|
||||||
|
Point *pt = ObjectWrap::Unwrap<Point>(info.This());
|
||||||
|
return scope.Close(Number::New(pt->point.x));
|
||||||
|
}
|
||||||
|
|
||||||
|
Handle<Value>
|
||||||
|
Point::GetY(Local<String> prop, const AccessorInfo &info) {
|
||||||
|
HandleScope scope;
|
||||||
|
Point *pt = ObjectWrap::Unwrap<Point>(info.This());
|
||||||
|
return scope.Close(Number::New(pt->point.y));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Point::Point(double x, double y): ObjectWrap() {
|
||||||
|
point = cvPoint2D32f(x, y);
|
||||||
|
}
|
||||||
15
src/Point.h
Normal file
15
src/Point.h
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
// Template class for 2D points
|
||||||
|
|
||||||
|
#include "OpenCV.h"
|
||||||
|
|
||||||
|
class Point: public node::ObjectWrap {
|
||||||
|
public:
|
||||||
|
CvPoint2D32f point;
|
||||||
|
static Persistent<FunctionTemplate> constructor;
|
||||||
|
static void Init(Handle<Object> target);
|
||||||
|
static Handle<Value> New(const Arguments &args);
|
||||||
|
Point(double x, double y);
|
||||||
|
|
||||||
|
static Handle<Value> GetX(Local<String> prop, const AccessorInfo &info);
|
||||||
|
static Handle<Value> GetY(Local<String> prop, const AccessorInfo &info);
|
||||||
|
};
|
||||||
11
src/init.cc
Normal file
11
src/init.cc
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
#include "OpenCV.h"
|
||||||
|
#include "Point.h"
|
||||||
|
#include "Image.h"
|
||||||
|
|
||||||
|
extern "C" void
|
||||||
|
init(Handle<Object> target) {
|
||||||
|
HandleScope scope;
|
||||||
|
OpenCV::Init(target);
|
||||||
|
Point::Init(target);
|
||||||
|
Image::Init(target);
|
||||||
|
}
|
||||||
19
wscript
Normal file
19
wscript
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
def set_options(opt):
|
||||||
|
opt.tool_options("compiler_cxx")
|
||||||
|
|
||||||
|
|
||||||
|
def configure(conf):
|
||||||
|
conf.check_tool('compiler_cxx')
|
||||||
|
conf.check_tool('node_addon')
|
||||||
|
#conf.check(lib='opencv_core', libpath=[
|
||||||
|
# '/lib', '/usr/lib', '/usr/local/lib','/usr/local/include'], uselib_store='OPENCV', mandatory=True)
|
||||||
|
conf.check_cfg(package='opencv', args='--cflags --libs', uselib_store='OPENCV')
|
||||||
|
|
||||||
|
|
||||||
|
def build(bld):
|
||||||
|
obj = bld.new_task_gen("cxx", "shlib", "node_addon")
|
||||||
|
obj.cxxflags = ["-g", "-D_FILE_OFFSET_BITS=64", "-D_LARGEFILE_SOURCE", "-Wall"]
|
||||||
|
# This is the name of our extension.
|
||||||
|
obj.target = "opencv"
|
||||||
|
obj.source = bld.glob('src/*.cc')
|
||||||
|
obj.uselib = ['OPENCV']
|
||||||
Loading…
x
Reference in New Issue
Block a user