From 162b091f25e29bf207ace79881eb4c1818d1849e Mon Sep 17 00:00:00 2001 From: jspdown Date: Sun, 22 Nov 2015 14:45:02 +0100 Subject: [PATCH] Add kernel argument to Dilate and Erode methods A second optional argument can be passed to `mat.erode` and `mat.dilate`. This argument define the kernel used for this morphological operation. A kernel can be generated by the GetStructuringElement function. --- src/Matrix.cc | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/Matrix.cc b/src/Matrix.cc index 97e890d..0178150 100755 --- a/src/Matrix.cc +++ b/src/Matrix.cc @@ -1341,7 +1341,13 @@ NAN_METHOD(Matrix::Dilate) { Matrix *self = Nan::ObjectWrap::Unwrap(info.This()); int niters = info[0]->NumberValue(); - cv::dilate(self->mat, self->mat, cv::Mat(), cv::Point(-1, -1), niters); + cv::Mat kernel = cv::Mat(); + if (info.Length() == 2) { + Matrix *kernelMatrix = Nan::ObjectWrap::Unwrap(info[1]->ToObject()); + kernel = kernelMatrix->mat; + } + + cv::dilate(self->mat, self->mat, kernel, cv::Point(-1, -1), niters); info.GetReturnValue().Set(Nan::Null()); } @@ -1352,7 +1358,12 @@ NAN_METHOD(Matrix::Erode) { Matrix *self = Nan::ObjectWrap::Unwrap(info.This()); int niters = info[0]->NumberValue(); - cv::erode(self->mat, self->mat, cv::Mat(), cv::Point(-1, -1), niters); + cv::Mat kernel = cv::Mat(); + if (info.Length() == 2) { + Matrix *kernelMatrix = Nan::ObjectWrap::Unwrap(info[1]->ToObject()); + kernel = kernelMatrix->mat; + } + cv::erode(self->mat, self->mat, kernel, cv::Point(-1, -1), niters); info.GetReturnValue().Set(Nan::Null()); }