mirror of
https://github.com/peterbraden/node-opencv.git
synced 2025-12-08 19:45:55 +00:00
add pixel function and floodFill function
This commit is contained in:
parent
5eb7e836c3
commit
fddd01a3d1
102
src/Matrix.cc
102
src/Matrix.cc
@ -5,6 +5,8 @@
|
||||
v8::Persistent<FunctionTemplate> Matrix::constructor;
|
||||
|
||||
cv::Scalar setColor(Local<Object> objColor);
|
||||
cv::Point setPoint(Local<Object> objPoint);
|
||||
cv::Rect* setRect(Local<Object> objRect);
|
||||
|
||||
//
|
||||
|
||||
@ -34,6 +36,7 @@ Matrix::Init(Handle<Object> target) {
|
||||
NODE_SET_PROTOTYPE_METHOD(constructor, "empty", Empty);
|
||||
NODE_SET_PROTOTYPE_METHOD(constructor, "get", Get);
|
||||
NODE_SET_PROTOTYPE_METHOD(constructor, "set", Set);
|
||||
NODE_SET_PROTOTYPE_METHOD(constructor, "pixel", Pixel);
|
||||
NODE_SET_PROTOTYPE_METHOD(constructor, "width", Width);
|
||||
NODE_SET_PROTOTYPE_METHOD(constructor, "height", Height);
|
||||
NODE_SET_PROTOTYPE_METHOD(constructor, "size", Size);
|
||||
@ -78,6 +81,8 @@ Matrix::Init(Handle<Object> target) {
|
||||
NODE_SET_PROTOTYPE_METHOD(constructor, "threshold", Threshold);
|
||||
NODE_SET_PROTOTYPE_METHOD(constructor, "meanStdDev", MeanStdDev);
|
||||
|
||||
NODE_SET_PROTOTYPE_METHOD(constructor, "floodFill", FloodFill);
|
||||
|
||||
NODE_SET_METHOD(constructor, "Eye", Eye);
|
||||
|
||||
|
||||
@ -162,6 +167,43 @@ Matrix::DblGet(cv::Mat mat, int i, int j){
|
||||
return val;
|
||||
}
|
||||
|
||||
|
||||
|
||||
Handle<Value>
|
||||
Matrix::Pixel(const Arguments& args){
|
||||
SETUP_FUNCTION(Matrix)
|
||||
|
||||
int y = args[0]->IntegerValue();
|
||||
int x = args[1]->IntegerValue();
|
||||
|
||||
//cv::Scalar scal = self->mat.at<uchar>(y, x);
|
||||
|
||||
|
||||
if(args.Length() == 3){
|
||||
|
||||
Local<Object> objColor = args[2]->ToObject();
|
||||
|
||||
self->mat.at<cv::Vec3b>(y, x)[0] = (uchar) objColor->Get(0)->IntegerValue();
|
||||
self->mat.at<cv::Vec3b>(y, x)[1] = (uchar) objColor->Get(1)->IntegerValue();
|
||||
self->mat.at<cv::Vec3b>(y, x)[2] = (uchar) objColor->Get(2)->IntegerValue();
|
||||
return scope.Close(args[2]->ToObject());
|
||||
}else{
|
||||
cv::Vec3b intensity = self->mat.at<cv::Vec3b>(y, x);
|
||||
|
||||
v8::Local<v8::Array> arr = v8::Array::New(3);
|
||||
arr->Set(0, Number::New( intensity[0] ));
|
||||
arr->Set(1, Number::New( intensity[1] ));
|
||||
arr->Set(2, Number::New( intensity[2] ));
|
||||
return scope.Close(arr);
|
||||
|
||||
}
|
||||
|
||||
return scope.Close(Undefined());
|
||||
//double val = Matrix::DblGet(t, i, j);
|
||||
//return scope.Close(Number::New(val));
|
||||
}
|
||||
|
||||
|
||||
Handle<Value>
|
||||
Matrix::Get(const Arguments& args){
|
||||
SETUP_FUNCTION(Matrix)
|
||||
@ -222,6 +264,7 @@ Matrix::Size(const Arguments& args){
|
||||
return scope.Close(arr);
|
||||
}
|
||||
|
||||
|
||||
Handle<Value>
|
||||
Matrix::Clone(const Arguments& args){
|
||||
SETUP_FUNCTION(Matrix)
|
||||
@ -959,6 +1002,30 @@ cv::Scalar setColor(Local<Object> objColor) {
|
||||
cv::Scalar color = cv::Scalar(valB->IntegerValue(), valG->IntegerValue(), valR->IntegerValue());
|
||||
return color;
|
||||
|
||||
|
||||
}
|
||||
|
||||
cv::Point setPoint(Local<Object> objPoint) {
|
||||
return cv::Point( objPoint->Get(0)->IntegerValue(), objPoint->Get(1)->IntegerValue() );
|
||||
}
|
||||
|
||||
cv::Rect* setRect(Local<Object> objRect) {
|
||||
|
||||
if(!objRect->IsArray() || !objRect->Get(0)->IsArray() || !objRect->Get(0)->IsArray() ){
|
||||
printf("error");
|
||||
return 0;
|
||||
};
|
||||
|
||||
Local<Object> point = objRect->Get(0)->ToObject();
|
||||
Local<Object> size = objRect->Get(1)->ToObject();
|
||||
cv::Rect ret;
|
||||
|
||||
ret.x = point->Get(0)->IntegerValue();
|
||||
ret.y = point->Get(1)->IntegerValue();
|
||||
ret.width = size->Get(0)->IntegerValue();
|
||||
ret.height = size->Get(1)->IntegerValue();
|
||||
|
||||
return (cv::Rect*) &ret;
|
||||
}
|
||||
|
||||
|
||||
@ -1135,3 +1202,38 @@ Matrix::MeanStdDev(const v8::Arguments& args) {
|
||||
data->Set(String::NewSymbol("stddev"), stddev);
|
||||
return scope.Close(data);
|
||||
}
|
||||
|
||||
Handle<Value>
|
||||
Matrix::FloodFill(const Arguments& args){
|
||||
SETUP_FUNCTION(Matrix)
|
||||
//obj->Get(v8::String::NewSymbol("x"))
|
||||
//int cv::floodFill(cv::InputOutputArray, cv::Point, cv::Scalar, cv::Rect*, cv::Scalar, cv::Scalar, int)
|
||||
|
||||
|
||||
/* mat.floodFill( { seedPoint: [1,1] ,
|
||||
newColor: [255,0,0] ,
|
||||
rect:[[0,2],[30,40]] ,
|
||||
loDiff : [8,90,60],
|
||||
upDiff:[10,100,70]
|
||||
} );*/
|
||||
|
||||
|
||||
if(args.Length() < 1 || !args[0]->IsObject()) {
|
||||
//error
|
||||
}
|
||||
|
||||
|
||||
Local<Object> obj = args[0]->ToObject();
|
||||
|
||||
int ret = cv::floodFill(self->mat, setPoint(obj->Get(v8::String::NewSymbol("seedPoint"))->ToObject())
|
||||
, setColor(obj->Get(v8::String::NewSymbol("newColor"))->ToObject())
|
||||
, obj->Get(v8::String::NewSymbol("rect"))->IsUndefined() ? 0 : setRect(obj->Get(v8::String::NewSymbol("rect"))->ToObject())
|
||||
, setColor(obj->Get(v8::String::NewSymbol("loDiff"))->ToObject())
|
||||
, setColor(obj->Get(v8::String::NewSymbol("upDiff"))->ToObject())
|
||||
, 4 );
|
||||
|
||||
|
||||
return scope.Close(Number::New( ret ));
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -74,6 +74,9 @@ class Matrix: public node::ObjectWrap {
|
||||
|
||||
JSFUNC(Threshold)
|
||||
JSFUNC(MeanStdDev)
|
||||
|
||||
JSFUNC(Pixel)
|
||||
JSFUNC(FloodFill)
|
||||
/*
|
||||
static Handle<Value> Val(const Arguments& args);
|
||||
static Handle<Value> RowRange(const Arguments& args);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user