@@ -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+
812871Handle<Value>
813872Matrix::Copy (const v8::Arguments& args) {
814873 HandleScope scope;
0 commit comments