From 92f0bf80e575376b74d766d2699baef81d37be96 Mon Sep 17 00:00:00 2001 From: Max Ehrlich Date: Tue, 27 Jan 2015 11:16:36 -0500 Subject: [PATCH] Added cv::undistort --- src/ImgProc.cc | 44 ++++++++++++++++++++++++++++++++++++++++++++ src/ImgProc.h | 2 ++ 2 files changed, 46 insertions(+) diff --git a/src/ImgProc.cc b/src/ImgProc.cc index 7945d93..d0b1ea6 100644 --- a/src/ImgProc.cc +++ b/src/ImgProc.cc @@ -1,4 +1,5 @@ #include "ImgProc.h" +#include "Matrix.h" void ImgProc::Init(Handle target) { @@ -6,5 +7,48 @@ void ImgProc::Init(Handle target) Local obj = NanNew(); NanAssignPersistent(inner, obj); + NODE_SET_METHOD(obj, "undistort", Undistort); + target->Set(NanNew("imgproc"), obj); } + +// cv::undistort +NAN_METHOD(ImgProc::Undistort) +{ + NanEscapableScope(); + + try { + // Get the arguments + + // Arg 0 is the image + Matrix* m0 = ObjectWrap::Unwrap(args[0]->ToObject()); + cv::Mat inputImage = m0->mat; + + // Arg 1 is the camera matrix + Matrix* m1 = ObjectWrap::Unwrap(args[1]->ToObject()); + cv::Mat K = m1->mat; + + // Arg 2 is the distortion coefficents + Matrix* m2 = ObjectWrap::Unwrap(args[2]->ToObject()); + cv::Mat dist = m2->mat; + + // Make an mat to hold the result image + cv::Mat outputImage; + + // Undistort + cv::undistort(inputImage, outputImage, K, dist); + + // Wrap the output image + Local outMatrixWrap = NanNew(Matrix::constructor)->GetFunction()->NewInstance(); + Matrix *outMatrix = ObjectWrap::Unwrap(outMatrixWrap); + outMatrix->mat = outputImage; + + // Return the output image + NanReturnValue(outMatrixWrap); + + } catch (cv::Exception &e) { + const char *err_msg = e.what(); + NanThrowError(err_msg); + NanReturnUndefined(); + } +} diff --git a/src/ImgProc.h b/src/ImgProc.h index 140b056..c00393f 100644 --- a/src/ImgProc.h +++ b/src/ImgProc.h @@ -8,6 +8,8 @@ class ImgProc: public node::ObjectWrap { public: static void Init(Handle target); + + static NAN_METHOD(Undistort); }; #endif