Skip to content

Commit 8822bb4

Browse files
committed
Merge pull request peterbraden#118 from ytham/blur
Added medianBlur and bilateralFilter
2 parents 1d70e20 + 3ac7b0d commit 8822bb4

File tree

2 files changed

+61
-0
lines changed

2 files changed

+61
-0
lines changed

src/Matrix.cc

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,8 @@ Matrix::Init(Handle<Object> target) {
5858
NODE_SET_PROTOTYPE_METHOD(constructor, "convertGrayscale", ConvertGrayscale);
5959
NODE_SET_PROTOTYPE_METHOD(constructor, "convertHSVscale", ConvertHSVscale);
6060
NODE_SET_PROTOTYPE_METHOD(constructor, "gaussianBlur", GaussianBlur);
61+
NODE_SET_PROTOTYPE_METHOD(constructor, "medianBlur", MedianBlur);
62+
NODE_SET_PROTOTYPE_METHOD(constructor, "bilateralFilter", BilateralFilter);
6163
NODE_SET_PROTOTYPE_METHOD(constructor, "copy", Copy);
6264
NODE_SET_PROTOTYPE_METHOD(constructor, "flip", Flip);
6365
NODE_SET_PROTOTYPE_METHOD(constructor, "roi", ROI);
@@ -809,6 +811,63 @@ Matrix::GaussianBlur(const v8::Arguments& args) {
809811
}
810812

811813

814+
Handle<Value>
815+
Matrix::MedianBlur(const v8::Arguments &args) {
816+
HandleScope scope;
817+
cv::Mat blurred;
818+
int ksize = 3;
819+
Matrix *self = ObjectWrap::Unwrap<Matrix>(args.This());
820+
821+
if (args[0]->IsNumber()) {
822+
ksize = args[0]->IntegerValue();
823+
if ((ksize % 2) == 0) {
824+
return ThrowException(Exception::TypeError(String::New(
825+
"'ksize' argument must be a positive odd integer")));
826+
}
827+
} else {
828+
return ThrowException(Exception::TypeError(String::New(
829+
"'ksize' argument must be a positive odd integer")));
830+
}
831+
832+
cv::medianBlur(self->mat, blurred, ksize);
833+
blurred.copyTo(self->mat);
834+
835+
return scope.Close(v8::Null());
836+
}
837+
838+
839+
Handle<Value>
840+
Matrix::BilateralFilter(const v8::Arguments &args) {
841+
HandleScope scope;
842+
cv::Mat filtered;
843+
int d = 15;
844+
double sigmaColor = 80;
845+
double sigmaSpace = 80;
846+
int borderType = cv::BORDER_DEFAULT;
847+
848+
Matrix *self = ObjectWrap::Unwrap<Matrix>(args.This());
849+
850+
if (args.Length() != 0) {
851+
if (args.Length() < 3 || args.Length() > 4) {
852+
return ThrowException(Exception::TypeError(String::New(
853+
"BilateralFilter takes 0, 3, or 4 arguments")));
854+
} else {
855+
d = args[0]->IntegerValue();
856+
sigmaColor = args[1]->NumberValue();
857+
sigmaSpace = args[2]->NumberValue();
858+
if (args.Length() == 4) {
859+
borderType = args[3]->IntegerValue();
860+
}
861+
}
862+
}
863+
864+
cv::bilateralFilter(self->mat, filtered, d, sigmaColor, sigmaSpace, borderType);
865+
filtered.copyTo(self->mat);
866+
867+
return scope.Close(v8::Null());
868+
}
869+
870+
812871
Handle<Value>
813872
Matrix::Copy(const v8::Arguments& args) {
814873
HandleScope scope;

src/Matrix.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,8 @@ class Matrix: public node::ObjectWrap {
4848
JSFUNC(ConvertGrayscale)
4949
JSFUNC(ConvertHSVscale)
5050
JSFUNC(GaussianBlur)
51+
JSFUNC(MedianBlur)
52+
JSFUNC(BilateralFilter)
5153
JSFUNC(Copy)
5254
JSFUNC(Flip)
5355
JSFUNC(ROI)

0 commit comments

Comments
 (0)