Fixed testing for imreadmulti on OpenCV < 3, added distanceTransform function to imgproc module.

This commit is contained in:
Nathan Graves 2017-02-20 11:08:11 -08:00
parent cfeb82d9fc
commit 592b70a3c2
6 changed files with 79 additions and 10 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 166 B

View File

@ -4,6 +4,9 @@
#define CONST(C) \ #define CONST(C) \
obj->Set(Nan::New<String>(#C).ToLocalChecked(), Nan::New<Integer>(C)); obj->Set(Nan::New<String>(#C).ToLocalChecked(), Nan::New<Integer>(C));
#define CONST_INT(C) \
obj->Set(Nan::New<String>(#C).ToLocalChecked(), Nan::New<Integer>((int)C));
#define CONST_DOUBLE(C) \ #define CONST_DOUBLE(C) \
obj->Set(Nan::New<String>(#C).ToLocalChecked(), Nan::New<Number>(C)); obj->Set(Nan::New<String>(#C).ToLocalChecked(), Nan::New<Number>(C));
@ -90,6 +93,14 @@ void Constants::Init(Local<Object> target) {
CONST_ENUM(RETR_CCOMP); CONST_ENUM(RETR_CCOMP);
CONST_ENUM(RETR_TREE); CONST_ENUM(RETR_TREE);
CONST_INT(CV_DIST_C);
CONST_INT(CV_DIST_L1);
CONST_INT(CV_DIST_L2);
CONST_INT(CV_DIST_MASK_3);
CONST_INT(CV_DIST_MASK_5);
CONST_INT(CV_DIST_MASK_PRECISE);
target->Set(Nan::New("Constants").ToLocalChecked(), obj); target->Set(Nan::New("Constants").ToLocalChecked(), obj);
} }

View File

@ -9,11 +9,44 @@ void ImgProc::Init(Local<Object> target) {
Nan::SetMethod(obj, "undistort", Undistort); Nan::SetMethod(obj, "undistort", Undistort);
Nan::SetMethod(obj, "initUndistortRectifyMap", InitUndistortRectifyMap); Nan::SetMethod(obj, "initUndistortRectifyMap", InitUndistortRectifyMap);
Nan::SetMethod(obj, "remap", Remap); Nan::SetMethod(obj, "remap", Remap);
Nan::SetMethod(obj, "distanceTransform", DistanceTransform);
Nan::SetMethod(obj, "getStructuringElement", GetStructuringElement); Nan::SetMethod(obj, "getStructuringElement", GetStructuringElement);
target->Set(Nan::New("imgproc").ToLocalChecked(), obj); target->Set(Nan::New("imgproc").ToLocalChecked(), obj);
} }
// cv::distanceTransform
NAN_METHOD(ImgProc::DistanceTransform) {
Nan::EscapableHandleScope scope;
try {
// Arg 0 is the image
Matrix* m0 = Nan::ObjectWrap::Unwrap<Matrix>(info[0]->ToObject());
cv::Mat inputImage = m0->mat;
// Arg 1 is the distance type (CV_DIST_L1, CV_DIST_L2, etc.)
int distType = info[1]->IntegerValue();;
// Make a mat to hold the result image
cv::Mat outputImage;
// Perform distance transform
cv::distanceTransform(inputImage, outputImage, distType, 0);
// Wrap the output image
Local<Object> outMatrixWrap = Nan::New(Matrix::constructor)->GetFunction()->NewInstance();
Matrix *outMatrix = Nan::ObjectWrap::Unwrap<Matrix>(outMatrixWrap);
outMatrix->mat = outputImage;
// Return the output image
info.GetReturnValue().Set(outMatrixWrap);
} catch (cv::Exception &e) {
const char *err_msg = e.what();
Nan::ThrowError(err_msg);
return;
}
}
// cv::undistort // cv::undistort
NAN_METHOD(ImgProc::Undistort) { NAN_METHOD(ImgProc::Undistort) {
Nan::EscapableHandleScope scope; Nan::EscapableHandleScope scope;

View File

@ -9,6 +9,7 @@
class ImgProc: public Nan::ObjectWrap { class ImgProc: public Nan::ObjectWrap {
public: public:
static void Init(Local<Object> target); static void Init(Local<Object> target);
static NAN_METHOD(DistanceTransform);
static NAN_METHOD(Undistort); static NAN_METHOD(Undistort);
static NAN_METHOD(InitUndistortRectifyMap); static NAN_METHOD(InitUndistortRectifyMap);
static NAN_METHOD(Remap); static NAN_METHOD(Remap);

View File

@ -68,6 +68,7 @@ NAN_METHOD(OpenCV::ReadImage) {
return; return;
} }
#if CV_MAJOR_VERSION >= 3
NAN_METHOD(OpenCV::ReadImageMulti) { NAN_METHOD(OpenCV::ReadImageMulti) {
Nan::EscapableHandleScope scope; Nan::EscapableHandleScope scope;
@ -111,3 +112,9 @@ NAN_METHOD(OpenCV::ReadImageMulti) {
return; return;
} }
#else
NAN_METHOD(OpenCV::ReadImageMulti) {
info.GetReturnValue().Set(Nan::New<Boolean>(false));
return;
}
#endif

View File

@ -217,6 +217,7 @@ test("Image read from file", function(assert){
}) })
test("Multi-page image read from file", function(assert){ test("Multi-page image read from file", function(assert){
if (parseInt(cv.version) >= 3) {
cv.readImageMulti("./examples/files/multipage.tif", function(err, imgs){ cv.readImageMulti("./examples/files/multipage.tif", function(err, imgs){
assert.ok(imgs); assert.ok(imgs);
assert.equal(imgs.length, 10); assert.equal(imgs.length, 10);
@ -229,6 +230,22 @@ test("Multi-page image read from file", function(assert){
} }
assert.end(); assert.end();
}) })
} else {
console.log(cv.Constants);
assert.equal(cv.readImageMulti("./examples/files/multipage.tif"), false);
assert.end();
}
})
test("Distance transform", function(assert){
cv.readImage("./examples/files/distanceTransform.png", function(err, img){
assert.ok(img);
// 50px image with single black pixel on right side
var result = cv.imgproc.distanceTransform(img, cv.Constants.CV_DIST_L2, cv.Constants.CV_DIST_MASK_PRECISE);
assert.equal(result.get(0,0), 49);
assert.end();
})
}) })
test("read Image from buffer", function(assert){ test("read Image from buffer", function(assert){