Your files were updated according to the changes described below, to complete the update follow these steps:


Lines changed in src/BackgroundSubtractor.cc

- Persistent<FunctionTemplate> BackgroundSubtractorWrap::constructor;
+ Nan::Persistent<FunctionTemplate> BackgroundSubtractorWrap::constructor;
-   NanScope();
+   Nan::HandleScope scope;
-   Local<FunctionTemplate> ctor = NanNew<FunctionTemplate>(BackgroundSubtractorWrap::New);
  NanAssignPersistent(constructor, ctor);
+   Local<FunctionTemplate> ctor = Nan::New<FunctionTemplate>(BackgroundSubtractorWrap::New);
  constructor.Reset(ctor);
-   ctor->SetClassName(NanNew("BackgroundSubtractor"));
+   ctor->SetClassName(Nan::New("BackgroundSubtractor").ToLocalChecked());
-   NODE_SET_METHOD(ctor, "createMOG", CreateMOG);
  NODE_SET_PROTOTYPE_METHOD(ctor, "applyMOG", ApplyMOG);
+   Nan::SetMethod(ctor, "createMOG", CreateMOG);
  Nan::SetPrototypeMethod(ctor, "applyMOG", ApplyMOG);
-   target->Set(NanNew("BackgroundSubtractor"), ctor->GetFunction());
+   target->Set(Nan::New("BackgroundSubtractor").ToLocalChecked(), ctor->GetFunction());
-   NanScope();
+   Nan::HandleScope scope;
-   if (args.This()->InternalFieldCount() == 0) {
+   if (info.This()->InternalFieldCount() == 0) {
-   pt->Wrap(args.This());
+   pt->Wrap(info.This());
-   NanReturnValue(args.This());
+   info.GetReturnValue().Set(info.This());
-   NanScope();
+   Nan::HandleScope scope;
-   // if(args.Length() > 1){
+   // if(info.Length() > 1){
-   Local<Object> n = NanNew(BackgroundSubtractorWrap::constructor)->GetFunction()->NewInstance();
+   Local<Object> n = Nan::New(BackgroundSubtractorWrap::constructor)->GetFunction()->NewInstance();
-   NanReturnValue( n );
+   info.GetReturnValue().Set( n );
-   if (args.Length() == 0) {
    argv[0] = NanNew("Input image missing");
    argv[1] = NanNull();
    cb->Call(NanGetCurrentContext()->Global(), 2, argv);
    NanReturnUndefined();
+   if (info.Length() == 0) {
    argv[0] = Nan::New("Input image missing").ToLocalChecked();
    argv[1] = Nan::Null();
    cb->Call(Nan::GetCurrentContext()->Global(), 2, argv);
    return;
-         NanNew(Matrix::constructor)->GetFunction()->NewInstance();
    Matrix *img = ObjectWrap::Unwrap<Matrix>(fgMask);
+         Nan::New(Matrix::constructor)->GetFunction()->NewInstance();
    Matrix *img = Nan::ObjectWrap::Unwrap<Matrix>(fgMask);
-     if (Buffer::HasInstance(args[0])) {
      uint8_t *buf = (uint8_t *) Buffer::Data(args[0]->ToObject());
      unsigned len = Buffer::Length(args[0]->ToObject());
+     if (Buffer::HasInstance(info[0])) {
      uint8_t *buf = (uint8_t *) Buffer::Data(info[0]->ToObject());
      unsigned len = Buffer::Length(info[0]->ToObject());
-       Matrix *_img = ObjectWrap::Unwrap<Matrix>(args[0]->ToObject());
+       Matrix *_img = Nan::ObjectWrap::Unwrap<Matrix>(info[0]->ToObject());
-       return NanThrowTypeError("Error loading file");
+       return Nan::ThrowTypeError("Error loading file");
-     argv[0] = NanNull();
+     argv[0] = Nan::Null();
-     cb->Call(NanGetCurrentContext()->Global(), 2, argv);
+     cb->Call(Nan::GetCurrentContext()->Global(), 2, argv);
-     NanReturnUndefined();
+     return;
-     NanThrowError(err_msg);
    NanReturnUndefined();
+     Nan::ThrowError(err_msg);
    return;

Lines changed in src/Calib3D.cc

-       NanNew(Matrix::constructor)->GetFunction()->NewInstance();
  Matrix *matrix = ObjectWrap::Unwrap<Matrix>(matrixWrap);
+       Nan::New(Matrix::constructor)->GetFunction()->NewInstance();
  Matrix *matrix = Nan::ObjectWrap::Unwrap<Matrix>(matrixWrap);
-   Matrix* m = ObjectWrap::Unwrap<Matrix>(matrix->ToObject());
+   Matrix* m = Nan::ObjectWrap::Unwrap<Matrix>(matrix->ToObject());
-           cv::Point2f(pt->Get(NanNew<String>("x"))->ToNumber()->Value(),
              pt->Get(NanNew<String>("y"))->ToNumber()->Value()));
+           cv::Point2f(pt->Get(Nan::New<String>("x").ToLocalChecked())->ToNumber()->Value(),
              pt->Get(Nan::New<String>("y").ToLocalChecked())->ToNumber()->Value()));
-           cv::Point3f(pt->Get(NanNew<String>("x"))->ToNumber()->Value(),
              pt->Get(NanNew<String>("y"))->ToNumber()->Value(),
              pt->Get(NanNew<String>("z"))->ToNumber()->Value()));
+           cv::Point3f(pt->Get(Nan::New<String>("x").ToLocalChecked())->ToNumber()->Value(),
              pt->Get(Nan::New<String>("y").ToLocalChecked())->ToNumber()->Value(),
              pt->Get(Nan::New<String>("z").ToLocalChecked())->ToNumber()->Value()));
-   Persistent<Object> inner;
  Local<Object> obj = NanNew<Object>();
  NanAssignPersistent(inner, obj);
+   Nan::Persistent<Object> inner;
  Local<Object> obj = Nan::New<Object>();
  inner.Reset(obj);
-   NODE_SET_METHOD(obj, "findChessboardCorners", FindChessboardCorners);
  NODE_SET_METHOD(obj, "drawChessboardCorners", DrawChessboardCorners);
  NODE_SET_METHOD(obj, "calibrateCamera", CalibrateCamera);
  NODE_SET_METHOD(obj, "solvePnP", SolvePnP);
  NODE_SET_METHOD(obj, "getOptimalNewCameraMatrix", GetOptimalNewCameraMatrix);
  NODE_SET_METHOD(obj, "stereoCalibrate", StereoCalibrate);
  NODE_SET_METHOD(obj, "stereoRectify", StereoRectify);
  NODE_SET_METHOD(obj, "computeCorrespondEpilines", ComputeCorrespondEpilines);
  NODE_SET_METHOD(obj, "reprojectImageTo3d", ReprojectImageTo3D);
+   Nan::SetMethod(obj, "findChessboardCorners", FindChessboardCorners);
  Nan::SetMethod(obj, "drawChessboardCorners", DrawChessboardCorners);
  Nan::SetMethod(obj, "calibrateCamera", CalibrateCamera);
  Nan::SetMethod(obj, "solvePnP", SolvePnP);
  Nan::SetMethod(obj, "getOptimalNewCameraMatrix", GetOptimalNewCameraMatrix);
  Nan::SetMethod(obj, "stereoCalibrate", StereoCalibrate);
  Nan::SetMethod(obj, "stereoRectify", StereoRectify);
  Nan::SetMethod(obj, "computeCorrespondEpilines", ComputeCorrespondEpilines);
  Nan::SetMethod(obj, "reprojectImageTo3d", ReprojectImageTo3D);
-   target->Set(NanNew("calib3d"), obj);
+   target->Set(Nan::New("calib3d").ToLocalChecked(), obj);
-   NanEscapableScope();
+   Nan::EscapableHandleScope scope;
-     cv::Mat mat = matFromMatrix(args[0]);
+     cv::Mat mat = matFromMatrix(info[0]);
-     cv::Size patternSize = sizeFromArray(args[1]);
+     cv::Size patternSize = sizeFromArray(info[1]);
-     Local<Object> ret = NanNew<Object>();
    ret->Set(NanNew<String>("found"), NanNew<Boolean>(found));
+     Local<Object> ret = Nan::New<Object>();
    ret->Set(Nan::New<String>("found").ToLocalChecked(), Nan::New<Boolean>(found));
-     Local<Array> cornersArray = NanNew<Array>(corners.size());
+     Local<Array> cornersArray = Nan::New<Array>(corners.size());
-       Local<Object> point_data = NanNew<Object>();
      point_data->Set(NanNew<String>("x"), NanNew<Number>(corners[i].x));
      point_data->Set(NanNew<String>("y"), NanNew<Number>(corners[i].y));
+       Local<Object> point_data = Nan::New<Object>();
      point_data->Set(Nan::New<String>("x").ToLocalChecked(), Nan::New<Number>(corners[i].x));
      point_data->Set(Nan::New<String>("y").ToLocalChecked(), Nan::New<Number>(corners[i].y));
-       cornersArray->Set(NanNew<Number>(i), point_data);
+       cornersArray->Set(Nan::New<Number>(i), point_data);
-     ret->Set(NanNew<String>("corners"), cornersArray);
+     ret->Set(Nan::New<String>("corners").ToLocalChecked(), cornersArray);
-     NanReturnValue(ret);
+     info.GetReturnValue().Set(ret);
-     NanThrowError(err_msg);
    NanReturnUndefined();
+     Nan::ThrowError(err_msg);
    return;
-   NanEscapableScope();
+   Nan::EscapableHandleScope scope;
-     cv::Mat mat = matFromMatrix(args[0]);
+     cv::Mat mat = matFromMatrix(info[0]);
-     cv::Size patternSize = sizeFromArray(args[1]);
+     cv::Size patternSize = sizeFromArray(info[1]);
-     std::vector<cv::Point2f> corners = points2fFromArray(args[2]);
+     std::vector<cv::Point2f> corners = points2fFromArray(info[2]);
-     bool patternWasFound = args[3]->ToBoolean()->Value();
+     bool patternWasFound = info[3]->ToBoolean()->Value();
-     NanReturnValue(args[0]);
+     info.GetReturnValue().Set(info[0]);
-     NanThrowError(err_msg);
    NanReturnUndefined();
+     Nan::ThrowError(err_msg);
    return;
-   NanEscapableScope();
+   Nan::EscapableHandleScope scope;
-         points3fFromArrayOfArrays(args[0]);
+         points3fFromArrayOfArrays(info[0]);
-         points2fFromArrayOfArrays(args[1]);
+         points2fFromArrayOfArrays(info[1]);
-     cv::Size imageSize = sizeFromArray(args[2]);
+     cv::Size imageSize = sizeFromArray(info[2]);
-     Local<Object> ret = NanNew<Object>();
+     Local<Object> ret = Nan::New<Object>();
-     ret->Set(NanNew<String>("reprojectionError"), NanNew<Number>(error));
+     ret->Set(Nan::New<String>("reprojectionError").ToLocalChecked(), Nan::New<Number>(error));
-     ret->Set(NanNew<String>("K"), KMatrixWrap);
+     ret->Set(Nan::New<String>("K").ToLocalChecked(), KMatrixWrap);
-     ret->Set(NanNew<String>("distortion"), distMatrixWrap);
+     ret->Set(Nan::New<String>("distortion").ToLocalChecked(), distMatrixWrap);
-     NanReturnValue(ret);
+     info.GetReturnValue().Set(ret);
-     NanThrowError(err_msg);
    NanReturnUndefined();
+     Nan::ThrowError(err_msg);
    return;
-   NanEscapableScope();
+   Nan::EscapableHandleScope scope;
-     std::vector<cv::Point3f> objectPoints = points3fFromArray(args[0]);
+     std::vector<cv::Point3f> objectPoints = points3fFromArray(info[0]);
-     std::vector<cv::Point2f> imagePoints = points2fFromArray(args[1]);
+     std::vector<cv::Point2f> imagePoints = points2fFromArray(info[1]);
-     cv::Mat K = matFromMatrix(args[2]);
+     cv::Mat K = matFromMatrix(info[2]);
-     cv::Mat dist = matFromMatrix(args[3]);
+     cv::Mat dist = matFromMatrix(info[3]);
-     Local<Object> ret = NanNew<Object>();
+     Local<Object> ret = Nan::New<Object>();
-     ret->Set(NanNew<String>("rvec"), rMatrixWrap);
+     ret->Set(Nan::New<String>("rvec").ToLocalChecked(), rMatrixWrap);
-     ret->Set(NanNew<String>("tvec"), tMatrixWrap);
+     ret->Set(Nan::New<String>("tvec").ToLocalChecked(), tMatrixWrap);
-     NanReturnValue(ret);
+     info.GetReturnValue().Set(ret);
-     NanThrowError(err_msg);
    NanReturnUndefined();
+     Nan::ThrowError(err_msg);
    return;
-   NanEscapableScope();
+   Nan::EscapableHandleScope scope;
-     cv::Mat Kin = matFromMatrix(args[0]);
+     cv::Mat Kin = matFromMatrix(info[0]);
-     cv::Mat dist = matFromMatrix(args[1]);
+     cv::Mat dist = matFromMatrix(info[1]);
-     cv::Size imageSize = sizeFromArray(args[2]);
+     cv::Size imageSize = sizeFromArray(info[2]);
-     double alpha = args[3]->ToNumber()->Value();
+     double alpha = info[3]->ToNumber()->Value();
-     cv::Size newImageSize = sizeFromArray(args[4]);
+     cv::Size newImageSize = sizeFromArray(info[4]);
-     NanReturnValue(KMatrixWrap);
+     info.GetReturnValue().Set(KMatrixWrap);
-     NanThrowError(err_msg);
    NanReturnUndefined();
+     Nan::ThrowError(err_msg);
    return;
-   NanEscapableScope();
+   Nan::EscapableHandleScope scope;
-         points3fFromArrayOfArrays(args[0]);
+         points3fFromArrayOfArrays(info[0]);
-         points2fFromArrayOfArrays(args[1]);
+         points2fFromArrayOfArrays(info[1]);
-         points2fFromArrayOfArrays(args[2]);
+         points2fFromArrayOfArrays(info[2]);
-     cv::Size imageSize = sizeFromArray(args[3]);
+     cv::Size imageSize = sizeFromArray(info[3]);
-     if (args.Length() >= 8) {
      k1 = matFromMatrix(args[4]);
      d1 = matFromMatrix(args[5]);
+     if (info.Length() >= 8) {
      k1 = matFromMatrix(info[4]);
      d1 = matFromMatrix(info[5]);
-       k2 = matFromMatrix(args[6]);
      d2 = matFromMatrix(args[7]);
+       k2 = matFromMatrix(info[6]);
      d2 = matFromMatrix(info[7]);
-     Local<Object> ret = NanNew<Object>();
+     Local<Object> ret = Nan::New<Object>();
-     ret->Set(NanNew<String>("K1"), K1MatrixWrap);
    ret->Set(NanNew<String>("distortion1"), d1MatrixWrap);
    ret->Set(NanNew<String>("K2"), K2MatrixWrap);
    ret->Set(NanNew<String>("distortion2"), d2MatrixWrap);
    ret->Set(NanNew<String>("R"), RMatrixWrap);
    ret->Set(NanNew<String>("t"), tMatrixWrap);
    ret->Set(NanNew<String>("E"), EMatrixWrap);
    ret->Set(NanNew<String>("F"), FMatrixWrap);
+     ret->Set(Nan::New<String>("K1").ToLocalChecked(), K1MatrixWrap);
    ret->Set(Nan::New<String>("distortion1").ToLocalChecked(), d1MatrixWrap);
    ret->Set(Nan::New<String>("K2").ToLocalChecked(), K2MatrixWrap);
    ret->Set(Nan::New<String>("distortion2").ToLocalChecked(), d2MatrixWrap);
    ret->Set(Nan::New<String>("R").ToLocalChecked(), RMatrixWrap);
    ret->Set(Nan::New<String>("t").ToLocalChecked(), tMatrixWrap);
    ret->Set(Nan::New<String>("E").ToLocalChecked(), EMatrixWrap);
    ret->Set(Nan::New<String>("F").ToLocalChecked(), FMatrixWrap);
-     NanReturnValue(ret);
+     info.GetReturnValue().Set(ret);
-     NanThrowError(err_msg);
    NanReturnUndefined();
+     Nan::ThrowError(err_msg);
    return;
-   NanEscapableScope();
+   Nan::EscapableHandleScope scope;
-     cv::Mat K1 = matFromMatrix(args[0]);
+     cv::Mat K1 = matFromMatrix(info[0]);
-     cv::Mat d1 = matFromMatrix(args[1]);
+     cv::Mat d1 = matFromMatrix(info[1]);
-     cv::Mat K2 = matFromMatrix(args[2]);
+     cv::Mat K2 = matFromMatrix(info[2]);
-     cv::Mat d2 = matFromMatrix(args[3]);
+     cv::Mat d2 = matFromMatrix(info[3]);
-     cv::Size imageSize = sizeFromArray(args[4]);
+     cv::Size imageSize = sizeFromArray(info[4]);
-     cv::Mat R = matFromMatrix(args[5]);
+     cv::Mat R = matFromMatrix(info[5]);
-     cv::Mat t = matFromMatrix(args[6]);
+     cv::Mat t = matFromMatrix(info[6]);
-     Local<Object> ret = NanNew<Object>();
+     Local<Object> ret = Nan::New<Object>();
-     ret->Set(NanNew<String>("R1"), matrixFromMat(R1));
    ret->Set(NanNew<String>("R2"), matrixFromMat(R2));
    ret->Set(NanNew<String>("P1"), matrixFromMat(P1));
    ret->Set(NanNew<String>("P2"), matrixFromMat(P2));
    ret->Set(NanNew<String>("Q"), matrixFromMat(Q));
+     ret->Set(Nan::New<String>("R1").ToLocalChecked(), matrixFromMat(R1));
    ret->Set(Nan::New<String>("R2").ToLocalChecked(), matrixFromMat(R2));
    ret->Set(Nan::New<String>("P1").ToLocalChecked(), matrixFromMat(P1));
    ret->Set(Nan::New<String>("P2").ToLocalChecked(), matrixFromMat(P2));
    ret->Set(Nan::New<String>("Q").ToLocalChecked(), matrixFromMat(Q));
-     NanReturnValue(ret);
+     info.GetReturnValue().Set(ret);
-     NanThrowError(err_msg);
    NanReturnUndefined();
+     Nan::ThrowError(err_msg);
    return;
-   NanEscapableScope();
+   Nan::EscapableHandleScope scope;
-     std::vector<cv::Point2f> points = points2fFromArray(args[0]);
+     std::vector<cv::Point2f> points = points2fFromArray(info[0]);
-     int whichImage = int(args[1]->ToNumber()->Value());
+     int whichImage = int(info[1]->ToNumber()->Value());
-     cv::Mat F = matFromMatrix(args[2]);
+     cv::Mat F = matFromMatrix(info[2]);
-     Local<Array> linesArray = NanNew<Array>(lines.size());
+     Local<Array> linesArray = Nan::New<Array>(lines.size());
-       Local<Object> line_data = NanNew<Object>();
      line_data->Set(NanNew<String>("a"), NanNew<Number>(lines[i][0]));
      line_data->Set(NanNew<String>("b"), NanNew<Number>(lines[i][1]));
      line_data->Set(NanNew<String>("c"), NanNew<Number>(lines[i][2]));
+       Local<Object> line_data = Nan::New<Object>();
      line_data->Set(Nan::New<String>("a").ToLocalChecked(), Nan::New<Number>(lines[i][0]));
      line_data->Set(Nan::New<String>("b").ToLocalChecked(), Nan::New<Number>(lines[i][1]));
      line_data->Set(Nan::New<String>("c").ToLocalChecked(), Nan::New<Number>(lines[i][2]));
-       linesArray->Set(NanNew<Number>(i), line_data);
+       linesArray->Set(Nan::New<Number>(i), line_data);
-     NanReturnValue(linesArray);
+     info.GetReturnValue().Set(linesArray);
-     NanThrowError(err_msg);
    NanReturnUndefined();
+     Nan::ThrowError(err_msg);
    return;
-   NanEscapableScope();
+   Nan::EscapableHandleScope scope;
-     cv::Mat disparity = matFromMatrix(args[0]);
+     cv::Mat disparity = matFromMatrix(info[0]);
-     cv::Mat Q = matFromMatrix(args[1]);
+     cv::Mat Q = matFromMatrix(info[1]);
-     NanReturnValue(depthImageMatrix);
+     info.GetReturnValue().Set(depthImageMatrix);
-     NanThrowError(err_msg);
    NanReturnUndefined();
+     Nan::ThrowError(err_msg);
    return;

Lines changed in src/BackgroundSubtractor.h

- class BackgroundSubtractorWrap: public node::ObjectWrap {
+ class BackgroundSubtractorWrap: public Nan::ObjectWrap {
-   static Persistent<FunctionTemplate> constructor;
+   static Nan::Persistent<FunctionTemplate> constructor;

Lines changed in src/CamShift.cc

- Persistent<FunctionTemplate> TrackedObject::constructor;
+ Nan::Persistent<FunctionTemplate> TrackedObject::constructor;
-   NanScope();
+   Nan::HandleScope scope;
-   Local<FunctionTemplate> ctor = NanNew<FunctionTemplate>(TrackedObject::New);
  NanAssignPersistent(constructor, ctor);
+   Local<FunctionTemplate> ctor = Nan::New<FunctionTemplate>(TrackedObject::New);
  constructor.Reset(ctor);
-   ctor->SetClassName(NanNew("TrackedObject"));
+   ctor->SetClassName(Nan::New("TrackedObject").ToLocalChecked());
-   NODE_SET_PROTOTYPE_METHOD(ctor, "track", Track);
+   Nan::SetPrototypeMethod(ctor, "track", Track);
-   target->Set(NanNew("TrackedObject"), ctor->GetFunction());
+   target->Set(Nan::New("TrackedObject").ToLocalChecked(), ctor->GetFunction());
-   NanScope();
+   Nan::HandleScope scope;
-   if (args.This()->InternalFieldCount() == 0) {
+   if (info.This()->InternalFieldCount() == 0) {
-   Matrix* m = ObjectWrap::Unwrap<Matrix>(args[0]->ToObject());
+   Matrix* m = Nan::ObjectWrap::Unwrap<Matrix>(info[0]->ToObject());
-   if (args[1]->IsArray()) {
    Local<Object> v8rec = args[1]->ToObject();
+   if (info[1]->IsArray()) {
    Local<Object> v8rec = info[1]->ToObject();
-   if (args[2]->IsObject()) {
    Local<Object> opts = args[2]->ToObject();
+   if (info[2]->IsObject()) {
    Local<Object> opts = info[2]->ToObject();
-     if (opts->Get(NanNew("channel"))->IsString()) {
      v8::String::Utf8Value c(opts->Get(NanNew("channel"))->ToString());
+     if (opts->Get(Nan::New("channel").ToLocalChecked())->IsString()) {
      v8::String::Utf8Value c(opts->Get(Nan::New("channel").ToLocalChecked())->ToString());
-   to->Wrap(args.This());
  NanReturnValue(args.This());
+   to->Wrap(info.This());
  info.GetReturnValue().Set(info.This());
-   if (args.Length() != 1) {
    NanThrowTypeError("track takes an image param");
    NanReturnUndefined();
+   if (info.Length() != 1) {
    Nan::ThrowTypeError("track takes an image param");
    return;
-   Matrix *im = ObjectWrap::Unwrap<Matrix>(args[0]->ToObject());
+   Matrix *im = Nan::ObjectWrap::Unwrap<Matrix>(info[0]->ToObject());
-     return NanThrowTypeError("OPENCV ERROR: prev rectangle is illogical");
+     return Nan::ThrowTypeError("OPENCV ERROR: prev rectangle is illogical");
-   v8::Local<v8::Array> arr = NanNew<Array>(4);
+   v8::Local<v8::Array> arr = Nan::New<Array>(4);
-   arr->Set(0, NanNew<Number>(bounds.x));
  arr->Set(1, NanNew<Number>(bounds.y));
  arr->Set(2, NanNew<Number>(bounds.x + bounds.width));
  arr->Set(3, NanNew<Number>(bounds.y + bounds.height));
+   arr->Set(0, Nan::New<Number>(bounds.x));
  arr->Set(1, Nan::New<Number>(bounds.y));
  arr->Set(2, Nan::New<Number>(bounds.x + bounds.width));
  arr->Set(3, Nan::New<Number>(bounds.y + bounds.height));
-     arr->Set(i, NanNew<Number>(pts[i].x));
    arr->Set(i + 1, NanNew<Number>(pts[i].y));
+     arr->Set(i, Nan::New<Number>(pts[i].x));
    arr->Set(i + 1, Nan::New<Number>(pts[i].y));
-   NanReturnValue(arr);
+   info.GetReturnValue().Set(arr);

Lines changed in src/Calib3D.h

- class Calib3D: public node::ObjectWrap {
+ class Calib3D: public Nan::ObjectWrap {

Lines changed in src/CascadeClassifierWrap.cc

- Persistent<FunctionTemplate> CascadeClassifierWrap::constructor;
+ Nan::Persistent<FunctionTemplate> CascadeClassifierWrap::constructor;
-   NanScope();
+   Nan::HandleScope scope;
-   Local<FunctionTemplate> ctor = NanNew<FunctionTemplate> (CascadeClassifierWrap::New);
  NanAssignPersistent(constructor, ctor);
+   Local<FunctionTemplate> ctor = Nan::New<FunctionTemplate> (CascadeClassifierWrap::New);
  constructor.Reset(ctor);
-   ctor->SetClassName(NanNew("CascadeClassifier"));
+   ctor->SetClassName(Nan::New("CascadeClassifier").ToLocalChecked());
-   NODE_SET_PROTOTYPE_METHOD(ctor, "detectMultiScale", DetectMultiScale);
+   Nan::SetPrototypeMethod(ctor, "detectMultiScale", DetectMultiScale);
-   target->Set(NanNew("CascadeClassifier"), ctor->GetFunction());
+   target->Set(Nan::New("CascadeClassifier").ToLocalChecked(), ctor->GetFunction());
-   NanScope();
+   Nan::HandleScope scope;
-   if (args.This()->InternalFieldCount() == 0) {
    NanThrowTypeError("Cannot instantiate without new");
+   if (info.This()->InternalFieldCount() == 0) {
    Nan::ThrowTypeError("Cannot instantiate without new");
-   CascadeClassifierWrap *pt = new CascadeClassifierWrap(*args[0]);
  pt->Wrap(args.This());
  NanReturnValue( args.This() );
+   CascadeClassifierWrap *pt = new CascadeClassifierWrap(*info[0]);
  pt->Wrap(info.This());
  info.GetReturnValue().Set( info.This() );
-   filename = std::string(*NanAsciiString(fileName->ToString()));
+   filename = std::string(*Nan::Utf8String(fileName->ToString()));
-     NanThrowTypeError("Error loading file");
+     Nan::ThrowTypeError("Error loading file");
- class AsyncDetectMultiScale: public NanAsyncWorker {
+ class AsyncDetectMultiScale: public Nan::AsyncWorker {
-   AsyncDetectMultiScale(NanCallback *callback, CascadeClassifierWrap *cc,
+   AsyncDetectMultiScale(Nan::Callback *callback, CascadeClassifierWrap *cc,
-       NanAsyncWorker(callback),
+       Nan::AsyncWorker(callback),
-     NanScope();
+     Nan::HandleScope scope;
-     v8::Local < v8::Array > arr = NanNew < v8::Array > (this->res.size());
+     v8::Local < v8::Array > arr = Nan::New < v8::Array > (this->res.size());
-       v8::Local < v8::Object > x = NanNew<v8::Object>();
      x->Set(NanNew("x"), NanNew < Number > (this->res[i].x));
      x->Set(NanNew("y"), NanNew < Number > (this->res[i].y));
      x->Set(NanNew("width"), NanNew < Number > (this->res[i].width));
      x->Set(NanNew("height"), NanNew < Number > (this->res[i].height));
+       v8::Local < v8::Object > x = Nan::New<v8::Object>();
      x->Set(Nan::New("x").ToLocalChecked(), Nan::New < Number > (this->res[i].x));
      x->Set(Nan::New("y").ToLocalChecked(), Nan::New < Number > (this->res[i].y));
      x->Set(Nan::New("width").ToLocalChecked(), Nan::New < Number > (this->res[i].width));
      x->Set(Nan::New("height").ToLocalChecked(), Nan::New < Number > (this->res[i].height));
-     argv[0] = NanNull();
+     argv[0] = Nan::Null();
-   NanScope();
+   Nan::HandleScope scope;
-   CascadeClassifierWrap *self = ObjectWrap::Unwrap<CascadeClassifierWrap> (args.This());
+   CascadeClassifierWrap *self = Nan::ObjectWrap::Unwrap<CascadeClassifierWrap> (info.This());
-   if (args.Length() < 2) {
    NanThrowTypeError("detectMultiScale takes at least 2 args");
+   if (info.Length() < 2) {
    Nan::ThrowTypeError("detectMultiScale takes at least 2 info");
-   Matrix *im = ObjectWrap::Unwrap < Matrix > (args[0]->ToObject());
+   Matrix *im = Nan::ObjectWrap::Unwrap < Matrix > (info[0]->ToObject());
-   if (args.Length() > 2 && args[2]->IsNumber()) {
    scale = args[2]->NumberValue();
+   if (info.Length() > 2 && info[2]->IsNumber()) {
    scale = info[2]->NumberValue();
-   if (args.Length() > 3 && args[3]->IsInt32()) {
    neighbors = args[3]->IntegerValue();
+   if (info.Length() > 3 && info[3]->IsInt32()) {
    neighbors = info[3]->IntegerValue();
-   if (args.Length() > 5 && args[4]->IsInt32() && args[5]->IsInt32()) {
    minw = args[4]->IntegerValue();
    minh = args[5]->IntegerValue();
+   if (info.Length() > 5 && info[4]->IsInt32() && info[5]->IsInt32()) {
    minw = info[4]->IntegerValue();
    minh = info[5]->IntegerValue();
-   NanCallback *callback = new NanCallback(cb.As<Function>());
+   Nan::Callback *callback = new Nan::Callback(cb.As<Function>());
-   NanAsyncQueueWorker( new AsyncDetectMultiScale(callback, self, im, scale,
+   Nan::AsyncQueueWorker( new AsyncDetectMultiScale(callback, self, im, scale,
-   NanReturnUndefined();
+   return;

Lines changed in src/CascadeClassifierWrap.h

- class CascadeClassifierWrap: public node::ObjectWrap {
+ class CascadeClassifierWrap: public Nan::ObjectWrap {
-   static Persistent<FunctionTemplate> constructor;
+   static Nan::Persistent<FunctionTemplate> constructor;

Lines changed in src/CamShift.h

- class TrackedObject: public node::ObjectWrap {
+ class TrackedObject: public Nan::ObjectWrap {
-   static Persistent<FunctionTemplate> constructor;
+   static Nan::Persistent<FunctionTemplate> constructor;

Lines changed in src/Constants.h

- class Constants: public node::ObjectWrap {
+ class Constants: public Nan::ObjectWrap {

Lines changed in src/Constants.cc

-   obj->Set(NanNew<String>(#C), NanNew<Integer>(C));
+   obj->Set(Nan::New<String>(#C), Nan::New<Integer>(C));
-   obj->Set(NanNew<String>(#C), NanNew<Integer>((int)(cv::C)));
+   obj->Set(Nan::New<String>(#C), Nan::New<Integer>((int)(cv::C)));
-   Persistent<Object> inner;
  Local<Object> obj = NanNew<Object>();
  NanAssignPersistent(inner, obj);
+   Nan::Persistent<Object> inner;
  Local<Object> obj = Nan::New<Object>();
  inner.Reset(obj);
-   target->Set(NanNew("Constants"), obj);
+   target->Set(Nan::New("Constants").ToLocalChecked(), obj);

Lines changed in src/Contours.cc

- v8::Persistent<FunctionTemplate> Contour::constructor;
+ Nan::Persistent<FunctionTemplate> Contour::constructor;
-   NanScope();
+   Nan::HandleScope scope;
-   Local<FunctionTemplate> ctor = NanNew<FunctionTemplate>(Contour::New);
  NanAssignPersistent(constructor, ctor);
+   Local<FunctionTemplate> ctor = Nan::New<FunctionTemplate>(Contour::New);
  constructor.Reset(ctor);
-   ctor->SetClassName(NanNew("Contours"));
+   ctor->SetClassName(Nan::New("Contours").ToLocalChecked());
-   NODE_SET_PROTOTYPE_METHOD(ctor, "point", Point);
  NODE_SET_PROTOTYPE_METHOD(ctor, "size", Size);
  NODE_SET_PROTOTYPE_METHOD(ctor, "cornerCount", CornerCount);
  NODE_SET_PROTOTYPE_METHOD(ctor, "area", Area);
  NODE_SET_PROTOTYPE_METHOD(ctor, "arcLength", ArcLength);
  NODE_SET_PROTOTYPE_METHOD(ctor, "approxPolyDP", ApproxPolyDP);
  NODE_SET_PROTOTYPE_METHOD(ctor, "convexHull", ConvexHull);
  NODE_SET_PROTOTYPE_METHOD(ctor, "boundingRect", BoundingRect);
  NODE_SET_PROTOTYPE_METHOD(ctor, "minAreaRect", MinAreaRect);
  NODE_SET_PROTOTYPE_METHOD(ctor, "fitEllipse", FitEllipse);
  NODE_SET_PROTOTYPE_METHOD(ctor, "isConvex", IsConvex);
  NODE_SET_PROTOTYPE_METHOD(ctor, "moments", Moments);
  NODE_SET_PROTOTYPE_METHOD(ctor, "hierarchy", Hierarchy);
  NODE_SET_PROTOTYPE_METHOD(ctor, "serialize", Serialize);
  NODE_SET_PROTOTYPE_METHOD(ctor, "deserialize", Deserialize);
  target->Set(NanNew("Contours"), ctor->GetFunction());
+   Nan::SetPrototypeMethod(ctor, "point", Point);
  Nan::SetPrototypeMethod(ctor, "size", Size);
  Nan::SetPrototypeMethod(ctor, "cornerCount", CornerCount);
  Nan::SetPrototypeMethod(ctor, "area", Area);
  Nan::SetPrototypeMethod(ctor, "arcLength", ArcLength);
  Nan::SetPrototypeMethod(ctor, "approxPolyDP", ApproxPolyDP);
  Nan::SetPrototypeMethod(ctor, "convexHull", ConvexHull);
  Nan::SetPrototypeMethod(ctor, "boundingRect", BoundingRect);
  Nan::SetPrototypeMethod(ctor, "minAreaRect", MinAreaRect);
  Nan::SetPrototypeMethod(ctor, "fitEllipse", FitEllipse);
  Nan::SetPrototypeMethod(ctor, "isConvex", IsConvex);
  Nan::SetPrototypeMethod(ctor, "moments", Moments);
  Nan::SetPrototypeMethod(ctor, "hierarchy", Hierarchy);
  Nan::SetPrototypeMethod(ctor, "serialize", Serialize);
  Nan::SetPrototypeMethod(ctor, "deserialize", Deserialize);
  target->Set(Nan::New("Contours").ToLocalChecked(), ctor->GetFunction());
-   NanScope();
+   Nan::HandleScope scope;
-   if (args.This()->InternalFieldCount() == 0) {
    NanThrowTypeError("Cannot instantiate without new");
+   if (info.This()->InternalFieldCount() == 0) {
    Nan::ThrowTypeError("Cannot instantiate without new");
-   contours->Wrap(args.Holder());
  NanReturnValue(args.Holder());
+   contours->Wrap(info.Holder());
  info.GetReturnValue().Set(info.Holder());
-     ObjectWrap() {
+     Nan::ObjectWrap() {
-   NanScope();
+   Nan::HandleScope scope;
-   Contour *self = ObjectWrap::Unwrap<Contour>(args.This());
  int pos = args[0]->NumberValue();
  int index = args[1]->NumberValue();
+   Contour *self = Nan::ObjectWrap::Unwrap<Contour>(info.This());
  int pos = info[0]->NumberValue();
  int index = info[1]->NumberValue();
-   Local<Object> data = NanNew<Object>();
  data->Set(NanNew("x"), NanNew<Number>(point.x));
  data->Set(NanNew("y"), NanNew<Number>(point.y));
+   Local<Object> data = Nan::New<Object>();
  data->Set(Nan::New("x").ToLocalChecked(), Nan::New<Number>(point.x));
  data->Set(Nan::New("y").ToLocalChecked(), Nan::New<Number>(point.y));
-   NanReturnValue(data);
+   info.GetReturnValue().Set(data);
-   NanScope();
+   Nan::HandleScope scope;
-   Contour *self = ObjectWrap::Unwrap<Contour>(args.This());
  int pos = args[0]->NumberValue();
+   Contour *self = Nan::ObjectWrap::Unwrap<Contour>(info.This());
  int pos = info[0]->NumberValue();
-   Local<Array> data = NanNew<Array>(points.size());
+   Local<Array> data = Nan::New<Array>(points.size());
-     Local<Object> point_data = NanNew<Object>();
    point_data->Set(NanNew<String>("x"), NanNew<Number>(points[i].x));
    point_data->Set(NanNew<String>("y"), NanNew<Number>(points[i].y));
+     Local<Object> point_data = Nan::New<Object>();
    point_data->Set(Nan::New<String>("x").ToLocalChecked(), Nan::New<Number>(points[i].x));
    point_data->Set(Nan::New<String>("y").ToLocalChecked(), Nan::New<Number>(points[i].y));
-   NanReturnValue(data);
+   info.GetReturnValue().Set(data);
-   NanScope();
+   Nan::HandleScope scope;
-   Contour *self = ObjectWrap::Unwrap<Contour>(args.This());
+   Contour *self = Nan::ObjectWrap::Unwrap<Contour>(info.This());
-   NanReturnValue(NanNew<Number>(self->contours.size()));
+   info.GetReturnValue().Set(Nan::New<Number>(self->contours.size()));
-   NanScope();
+   Nan::HandleScope scope;
-   Contour *self = ObjectWrap::Unwrap<Contour>(args.This());
  int pos = args[0]->NumberValue();
+   Contour *self = Nan::ObjectWrap::Unwrap<Contour>(info.This());
  int pos = info[0]->NumberValue();
-   NanReturnValue(NanNew<Number>(self->contours[pos].size()));
+   info.GetReturnValue().Set(Nan::New<Number>(self->contours[pos].size()));
-   NanScope();
+   Nan::HandleScope scope;
-   Contour *self = ObjectWrap::Unwrap<Contour>(args.This());
  int pos = args[0]->NumberValue();
+   Contour *self = Nan::ObjectWrap::Unwrap<Contour>(info.This());
  int pos = info[0]->NumberValue();
-   // NanReturnValue(NanNew<Number>(contourArea(self->contours)));
  NanReturnValue(NanNew<Number>(contourArea(cv::Mat(self->contours[pos]))));
+   // info.GetReturnValue().Set(Nan::New<Number>(contourArea(self->contours)));
  info.GetReturnValue().Set(Nan::New<Number>(contourArea(cv::Mat(self->contours[pos]))));
-   NanScope();
+   Nan::HandleScope scope;
-   Contour *self = ObjectWrap::Unwrap<Contour>(args.This());
  int pos = args[0]->NumberValue();
  bool isClosed = args[1]->BooleanValue();
+   Contour *self = Nan::ObjectWrap::Unwrap<Contour>(info.This());
  int pos = info[0]->NumberValue();
  bool isClosed = info[1]->BooleanValue();
-   NanReturnValue(NanNew<Number>(arcLength(cv::Mat(self->contours[pos]), isClosed)));
+   info.GetReturnValue().Set(Nan::New<Number>(arcLength(cv::Mat(self->contours[pos]), isClosed)));
-   NanScope();
+   Nan::HandleScope scope;
-   Contour *self = ObjectWrap::Unwrap<Contour>(args.This());
  int pos = args[0]->NumberValue();
  double epsilon = args[1]->NumberValue();
  bool isClosed = args[2]->BooleanValue();
+   Contour *self = Nan::ObjectWrap::Unwrap<Contour>(info.This());
  int pos = info[0]->NumberValue();
  double epsilon = info[1]->NumberValue();
  bool isClosed = info[2]->BooleanValue();
-   NanReturnNull();
+   info.GetReturnValue().Set(Nan::Null());
-   NanScope();
+   Nan::HandleScope scope;
-   Contour *self = ObjectWrap::Unwrap<Contour>(args.This());
+   Contour *self = Nan::ObjectWrap::Unwrap<Contour>(info.This());
-   int pos = args[0]->NumberValue();
  bool clockwise = args[1]->BooleanValue();
+   int pos = info[0]->NumberValue();
  bool clockwise = info[1]->BooleanValue();
-   NanReturnNull();
+   info.GetReturnValue().Set(Nan::Null());
-   NanScope();
+   Nan::HandleScope scope;
-   Contour *self = ObjectWrap::Unwrap<Contour>(args.This());
  int pos = args[0]->NumberValue();
+   Contour *self = Nan::ObjectWrap::Unwrap<Contour>(info.This());
  int pos = info[0]->NumberValue();
-   Local<Object> rect = NanNew<Object>();
+   Local<Object> rect = Nan::New<Object>();
-   rect->Set(NanNew("x"), NanNew<Number>(bounding.x));
  rect->Set(NanNew("y"), NanNew<Number>(bounding.y));
  rect->Set(NanNew("width"), NanNew<Number>(bounding.width));
  rect->Set(NanNew("height"), NanNew<Number>(bounding.height));
+   rect->Set(Nan::New("x").ToLocalChecked(), Nan::New<Number>(bounding.x));
  rect->Set(Nan::New("y").ToLocalChecked(), Nan::New<Number>(bounding.y));
  rect->Set(Nan::New("width").ToLocalChecked(), Nan::New<Number>(bounding.width));
  rect->Set(Nan::New("height").ToLocalChecked(), Nan::New<Number>(bounding.height));
-   NanReturnValue(rect);
+   info.GetReturnValue().Set(rect);
-   NanScope();
+   Nan::HandleScope scope;
-   Contour *self = ObjectWrap::Unwrap<Contour>(args.This());
  int pos = args[0]->NumberValue();
+   Contour *self = Nan::ObjectWrap::Unwrap<Contour>(info.This());
  int pos = info[0]->NumberValue();
-   Local<Object> rect = NanNew<Object>();
  rect->Set(NanNew("angle"), NanNew<Number>(minimum.angle));
+   Local<Object> rect = Nan::New<Object>();
  rect->Set(Nan::New("angle").ToLocalChecked(), Nan::New<Number>(minimum.angle));
-   Local<Object> size = NanNew<Object>();
  size->Set(NanNew("height"), NanNew<Number>(minimum.size.height));
  size->Set(NanNew("width"), NanNew<Number>(minimum.size.width));
  rect->Set(NanNew("size"), size);
+   Local<Object> size = Nan::New<Object>();
  size->Set(Nan::New("height").ToLocalChecked(), Nan::New<Number>(minimum.size.height));
  size->Set(Nan::New("width").ToLocalChecked(), Nan::New<Number>(minimum.size.width));
  rect->Set(Nan::New("size").ToLocalChecked(), size);
-   Local<Object> center = NanNew<Object>();
  center->Set(NanNew("x"), NanNew<Number>(minimum.center.x));
  center->Set(NanNew("y"), NanNew<Number>(minimum.center.y));
+   Local<Object> center = Nan::New<Object>();
  center->Set(Nan::New("x").ToLocalChecked(), Nan::New<Number>(minimum.center.x));
  center->Set(Nan::New("y").ToLocalChecked(), Nan::New<Number>(minimum.center.y));
-   v8::Local<v8::Array> points = NanNew<Array>(4);
+   v8::Local<v8::Array> points = Nan::New<Array>(4);
-     Local<Object> point = NanNew<Object>();
    point->Set(NanNew("x"), NanNew<Number>(rect_points[i].x));
    point->Set(NanNew("y"), NanNew<Number>(rect_points[i].y));
+     Local<Object> point = Nan::New<Object>();
    point->Set(Nan::New("x").ToLocalChecked(), Nan::New<Number>(rect_points[i].x));
    point->Set(Nan::New("y").ToLocalChecked(), Nan::New<Number>(rect_points[i].y));
-   rect->Set(NanNew("points"), points);
+   rect->Set(Nan::New("points").ToLocalChecked(), points);
-   NanReturnValue(rect);
+   info.GetReturnValue().Set(rect);
-   NanScope();
+   Nan::HandleScope scope;
-   Contour *self = ObjectWrap::Unwrap<Contour>(args.This());
  int pos = args[0]->NumberValue();
+   Contour *self = Nan::ObjectWrap::Unwrap<Contour>(info.This());
  int pos = info[0]->NumberValue();
-     Local<Object> jsEllipse = NanNew<Object>();
    jsEllipse->Set(NanNew("angle"), NanNew<Number>(ellipse.angle));
+     Local<Object> jsEllipse = Nan::New<Object>();
    jsEllipse->Set(Nan::New("angle").ToLocalChecked(), Nan::New<Number>(ellipse.angle));
-     Local<Object> size = NanNew<Object>();
    size->Set(NanNew("height"), NanNew<Number>(ellipse.size.height));
    size->Set(NanNew("width"), NanNew<Number>(ellipse.size.width));
    jsEllipse->Set(NanNew("size"), size);
+     Local<Object> size = Nan::New<Object>();
    size->Set(Nan::New("height").ToLocalChecked(), Nan::New<Number>(ellipse.size.height));
    size->Set(Nan::New("width").ToLocalChecked(), Nan::New<Number>(ellipse.size.width));
    jsEllipse->Set(Nan::New("size").ToLocalChecked(), size);
-     Local<Object> center = NanNew<Object>();
    center->Set(NanNew("x"), NanNew<Number>(ellipse.center.x));
    center->Set(NanNew("y"), NanNew<Number>(ellipse.center.y));
    jsEllipse->Set(NanNew("center"), center);
+     Local<Object> center = Nan::New<Object>();
    center->Set(Nan::New("x").ToLocalChecked(), Nan::New<Number>(ellipse.center.x));
    center->Set(Nan::New("y").ToLocalChecked(), Nan::New<Number>(ellipse.center.y));
    jsEllipse->Set(Nan::New("center").ToLocalChecked(), center);
-     NanReturnValue(jsEllipse);
+     info.GetReturnValue().Set(jsEllipse);
-   NanReturnNull();
+   info.GetReturnValue().Set(Nan::Null());
-   NanScope();
+   Nan::HandleScope scope;
-   Contour *self = ObjectWrap::Unwrap<Contour>(args.This());
  int pos = args[0]->NumberValue();
+   Contour *self = Nan::ObjectWrap::Unwrap<Contour>(info.This());
  int pos = info[0]->NumberValue();
-   NanReturnValue(NanNew<Boolean>(isContourConvex(cv::Mat(self->contours[pos]))));
+   info.GetReturnValue().Set(Nan::New<Boolean>(isContourConvex(cv::Mat(self->contours[pos]))));
-   NanScope();
+   Nan::HandleScope scope;
-   Contour *self = ObjectWrap::Unwrap<Contour>(args.This());
  int pos = args[0]->NumberValue();
+   Contour *self = Nan::ObjectWrap::Unwrap<Contour>(info.This());
  int pos = info[0]->NumberValue();
-   Local<Object> res = NanNew<Object>();
+   Local<Object> res = Nan::New<Object>();
-   res->Set(NanNew("m00"), NanNew<Number>(mu.m00));
  res->Set(NanNew("m10"), NanNew<Number>(mu.m10));
  res->Set(NanNew("m01"), NanNew<Number>(mu.m01));
  res->Set(NanNew("m11"), NanNew<Number>(mu.m11));
+   res->Set(Nan::New("m00").ToLocalChecked(), Nan::New<Number>(mu.m00));
  res->Set(Nan::New("m10").ToLocalChecked(), Nan::New<Number>(mu.m10));
  res->Set(Nan::New("m01").ToLocalChecked(), Nan::New<Number>(mu.m01));
  res->Set(Nan::New("m11").ToLocalChecked(), Nan::New<Number>(mu.m11));
-   NanReturnValue(res);
+   info.GetReturnValue().Set(res);
-   NanScope();
+   Nan::HandleScope scope;
-   Contour *self = ObjectWrap::Unwrap<Contour>(args.This());
  int pos = args[0]->IntegerValue();
+   Contour *self = Nan::ObjectWrap::Unwrap<Contour>(info.This());
  int pos = info[0]->IntegerValue();
-   Local<Array> res = NanNew<Array>(4);
+   Local<Array> res = Nan::New<Array>(4);
-   res->Set(0, NanNew<Number>(hierarchy[0]));
  res->Set(1, NanNew<Number>(hierarchy[1]));
  res->Set(2, NanNew<Number>(hierarchy[2]));
  res->Set(3, NanNew<Number>(hierarchy[3]));
+   res->Set(0, Nan::New<Number>(hierarchy[0]));
  res->Set(1, Nan::New<Number>(hierarchy[1]));
  res->Set(2, Nan::New<Number>(hierarchy[2]));
  res->Set(3, Nan::New<Number>(hierarchy[3]));
-   NanReturnValue(res);
+   info.GetReturnValue().Set(res);
-   NanScope();
+   Nan::HandleScope scope;
-   Contour *self = ObjectWrap::Unwrap<Contour>(args.This());
+   Contour *self = Nan::ObjectWrap::Unwrap<Contour>(info.This());
-   Local<Array> contours_data = NanNew<Array>(self->contours.size());
+   Local<Array> contours_data = Nan::New<Array>(self->contours.size());
-     Local<Array> contour_data = NanNew<Array>(points.size());
+     Local<Array> contour_data = Nan::New<Array>(points.size());
-       Local<Array> point_data = NanNew<Array>(2);
      point_data->Set(0, NanNew<Number>(points[j].x));
      point_data->Set(1, NanNew<Number>(points[j].y));
+       Local<Array> point_data = Nan::New<Array>(2);
      point_data->Set(0, Nan::New<Number>(points[j].x));
      point_data->Set(1, Nan::New<Number>(points[j].y));
-   Local<Array> hierarchy_data = NanNew<Array>(self->hierarchy.size());
+   Local<Array> hierarchy_data = Nan::New<Array>(self->hierarchy.size());
-     Local<Array> contour_data = NanNew<Array>(4);
    contour_data->Set(0, NanNew<Number>(self->hierarchy[i][0]));
    contour_data->Set(1, NanNew<Number>(self->hierarchy[i][1]));
    contour_data->Set(2, NanNew<Number>(self->hierarchy[i][2]));
    contour_data->Set(3, NanNew<Number>(self->hierarchy[i][3]));
+     Local<Array> contour_data = Nan::New<Array>(4);
    contour_data->Set(0, Nan::New<Number>(self->hierarchy[i][0]));
    contour_data->Set(1, Nan::New<Number>(self->hierarchy[i][1]));
    contour_data->Set(2, Nan::New<Number>(self->hierarchy[i][2]));
    contour_data->Set(3, Nan::New<Number>(self->hierarchy[i][3]));
-   Local<Object> data = NanNew<Object>();
  data->Set(NanNew<String>("contours"), contours_data);
  data->Set(NanNew<String>("hierarchy"), hierarchy_data);
+   Local<Object> data = Nan::New<Object>();
  data->Set(Nan::New<String>("contours").ToLocalChecked(), contours_data);
  data->Set(Nan::New<String>("hierarchy").ToLocalChecked(), hierarchy_data);
-   NanReturnValue(data);
+   info.GetReturnValue().Set(data);
-   NanScope();
+   Nan::HandleScope scope;
-   Contour *self = ObjectWrap::Unwrap<Contour>(args.This());
+   Contour *self = Nan::ObjectWrap::Unwrap<Contour>(info.This());
-   Handle<Object> data = Handle<Object>::Cast(args[0]);
+   Handle<Object> data = Handle<Object>::Cast(info[0]);
-   Handle<Array> contours_data = Handle<Array>::Cast(data->Get(NanNew<String>("contours")));
  Handle<Array> hierarchy_data = Handle<Array>::Cast(data->Get(NanNew<String>("hierarchy")));
+   Handle<Array> contours_data = Handle<Array>::Cast(data->Get(Nan::New<String>("contours").ToLocalChecked()));
  Handle<Array> hierarchy_data = Handle<Array>::Cast(data->Get(Nan::New<String>("hierarchy").ToLocalChecked()));
-   NanReturnNull();
+   info.GetReturnValue().Set(Nan::Null());

Lines changed in src/Contours.h

- class Contour: public node::ObjectWrap {
+ class Contour: public Nan::ObjectWrap {
-   static Persistent<FunctionTemplate> constructor;
+   static Nan::Persistent<FunctionTemplate> constructor;

Lines changed in src/FaceRecognizer.cc

-     std::string filename = std::string(*NanAsciiString(v->ToString()));
+     std::string filename = std::string(*Nan::Utf8String(v->ToString()));
-     Matrix *img = ObjectWrap::Unwrap<Matrix>(v->ToObject());
+     Matrix *img = Nan::ObjectWrap::Unwrap<Matrix>(v->ToObject());
- Persistent<FunctionTemplate> FaceRecognizerWrap::constructor;
+ Nan::Persistent<FunctionTemplate> FaceRecognizerWrap::constructor;
-   NanScope();
+   Nan::HandleScope scope;
-   Local<FunctionTemplate> ctor = NanNew<FunctionTemplate>(FaceRecognizerWrap::New);
  NanAssignPersistent(constructor, ctor);
+   Local<FunctionTemplate> ctor = Nan::New<FunctionTemplate>(FaceRecognizerWrap::New);
  constructor.Reset(ctor);
-   ctor->SetClassName(NanNew("FaceRecognizer"));
+   ctor->SetClassName(Nan::New("FaceRecognizer").ToLocalChecked());
-   NODE_SET_METHOD(ctor, "createLBPHFaceRecognizer", CreateLBPH);
  NODE_SET_METHOD(ctor, "createEigenFaceRecognizer", CreateEigen);
  NODE_SET_METHOD(ctor, "createFisherFaceRecognizer", CreateFisher);
+   Nan::SetMethod(ctor, "createLBPHFaceRecognizer", CreateLBPH);
  Nan::SetMethod(ctor, "createEigenFaceRecognizer", CreateEigen);
  Nan::SetMethod(ctor, "createFisherFaceRecognizer", CreateFisher);
-   NODE_SET_PROTOTYPE_METHOD(ctor, "trainSync", TrainSync);
  NODE_SET_PROTOTYPE_METHOD(ctor, "updateSync", UpdateSync);
  NODE_SET_PROTOTYPE_METHOD(ctor, "predictSync", PredictSync);
  NODE_SET_PROTOTYPE_METHOD(ctor, "saveSync", SaveSync);
  NODE_SET_PROTOTYPE_METHOD(ctor, "loadSync", LoadSync);
+   Nan::SetPrototypeMethod(ctor, "trainSync", TrainSync);
  Nan::SetPrototypeMethod(ctor, "updateSync", UpdateSync);
  Nan::SetPrototypeMethod(ctor, "predictSync", PredictSync);
  Nan::SetPrototypeMethod(ctor, "saveSync", SaveSync);
  Nan::SetPrototypeMethod(ctor, "loadSync", LoadSync);
-   NODE_SET_PROTOTYPE_METHOD(ctor, "getMat", GetMat);
+   Nan::SetPrototypeMethod(ctor, "getMat", GetMat);
-   target->Set(NanNew("FaceRecognizer"), ctor->GetFunction());
+   target->Set(Nan::New("FaceRecognizer").ToLocalChecked(), ctor->GetFunction());
-   NanScope();
+   Nan::HandleScope scope;
-   if (args.This()->InternalFieldCount() == 0) {
+   if (info.This()->InternalFieldCount() == 0) {
-   pt->Wrap(args.This());
  NanReturnValue(args.This());
+   pt->Wrap(info.This());
  info.GetReturnValue().Set(info.This());
-   NanScope();
+   Nan::HandleScope scope;
-   Local<Object> n = NanNew(FaceRecognizerWrap::constructor)->GetFunction()->NewInstance();
+   Local<Object> n = Nan::New(FaceRecognizerWrap::constructor)->GetFunction()->NewInstance();
-   NanReturnValue( n );
+   info.GetReturnValue().Set( n );
-   NanScope();
+   Nan::HandleScope scope;
-   Local<Object> n = NanNew(FaceRecognizerWrap::constructor)->GetFunction()->NewInstance();
+   Local<Object> n = Nan::New(FaceRecognizerWrap::constructor)->GetFunction()->NewInstance();
-   NanReturnValue( n );
+   info.GetReturnValue().Set( n );
-   NanScope();
+   Nan::HandleScope scope;
-   Local<Object> n = NanNew(FaceRecognizerWrap::constructor)->GetFunction()->NewInstance();
+   Local<Object> n = Nan::New(FaceRecognizerWrap::constructor)->GetFunction()->NewInstance();
-   NanReturnValue( n );
+   info.GetReturnValue().Set( n );
- Handle<Value> UnwrapTrainingData(_NAN_METHOD_ARGS_TYPE args,
+ Handle<Value> UnwrapTrainingData(Nan::NAN_METHOD_ARGS_TYPE info,
-   if (args.Length() < 1 || !args[0]->IsArray()) {
+   if (info.Length() < 1 || !info[0]->IsArray()) {
-   // const Local<Array> tuples = v8::Array::Cast(*args[0]);
  const Local<Array> tuples = Local<Array>::Cast(args[0]);
+   // const Local<Array> tuples = v8::Array::Cast(*info[0]);
  const Local<Array> tuples = Local<Array>::Cast(info[0]);
-   return NanUndefined();
+   return Nan::Undefined();
-   Handle<Value> exception = UnwrapTrainingData(args, &images, &labels);
+   Handle<Value> exception = UnwrapTrainingData(info, &images, &labels);
-     NanReturnValue(exception);  // FIXME: not too sure about returning exceptions like this
+     info.GetReturnValue().Set(exception);  // FIXME: not too sure about returning exceptions like this
-   NanReturnUndefined();
+   return;
-   Handle<Value> exception = UnwrapTrainingData(args, &images, &labels);
+   Handle<Value> exception = UnwrapTrainingData(info, &images, &labels);
-   NanReturnUndefined();
+   return;
-   cv::Mat im = fromMatrixOrFilename(args[0]);  // TODO CHECK!
+   cv::Mat im = fromMatrixOrFilename(info[0]);  // TODO CHECK!
-   v8::Local<v8::Object> res = NanNew<Object>();
  res->Set(NanNew("id"), NanNew<Number>(predictedLabel));
  res->Set(NanNew("confidence"), NanNew<Number>(confidence));
+   v8::Local<v8::Object> res = Nan::New<Object>();
  res->Set(Nan::New("id").ToLocalChecked(), Nan::New<Number>(predictedLabel));
  res->Set(Nan::New("confidence").ToLocalChecked(), Nan::New<Number>(confidence));
-   NanReturnValue(res);
+   info.GetReturnValue().Set(res);
-   if (!args[0]->IsString()) {
+   if (!info[0]->IsString()) {
-   std::string filename = std::string(*NanAsciiString(args[0]->ToString()));
+   std::string filename = std::string(*Nan::Utf8String(info[0]->ToString()));
-   NanReturnUndefined();
+   return;
-   if (!args[0]->IsString()) {
+   if (!info[0]->IsString()) {
-   std::string filename = std::string(*NanAsciiString(args[0]->ToString()));
+   std::string filename = std::string(*Nan::Utf8String(info[0]->ToString()));
-   NanReturnUndefined();
+   return;
-   if (!args[0]->IsString()) {
+   if (!info[0]->IsString()) {
-   std::string key = std::string(*NanAsciiString(args[0]->ToString()));
+   std::string key = std::string(*Nan::Utf8String(info[0]->ToString()));
-   Local<Object> im = NanNew(Matrix::constructor)->GetFunction()->NewInstance();
  Matrix *img = ObjectWrap::Unwrap<Matrix>(im);
+   Local<Object> im = Nan::New(Matrix::constructor)->GetFunction()->NewInstance();
  Matrix *img = Nan::ObjectWrap::Unwrap<Matrix>(im);
-   NanReturnValue(im);
+   info.GetReturnValue().Set(im);

Lines changed in src/FaceRecognizer.h

- class FaceRecognizerWrap: public node::ObjectWrap {
+ class FaceRecognizerWrap: public Nan::ObjectWrap {
-   static Persistent<FunctionTemplate> constructor;
+   static Nan::Persistent<FunctionTemplate> constructor;

Lines changed in src/Features2d.cc

-   NanScope();
+   Nan::HandleScope scope;
-   NODE_SET_METHOD(target, "ImageSimilarity", Similarity);
+   Nan::SetMethod(target, "ImageSimilarity", Similarity);
- class AsyncDetectSimilarity: public NanAsyncWorker {
+ class AsyncDetectSimilarity: public Nan::AsyncWorker {
-   AsyncDetectSimilarity(NanCallback *callback, cv::Mat image1, cv::Mat image2) :
      NanAsyncWorker(callback),
+   AsyncDetectSimilarity(Nan::Callback *callback, cv::Mat image1, cv::Mat image2) :
      Nan::AsyncWorker(callback),
-     NanScope();
+     Nan::HandleScope scope;
-     argv[0] = NanNull();
    argv[1] = NanNew<Number>(dissimilarity);
+     argv[0] = Nan::Null();
    argv[1] = Nan::New<Number>(dissimilarity);
-   NanScope();
+   Nan::HandleScope scope;
-   cv::Mat image1 = ObjectWrap::Unwrap<Matrix>(args[0]->ToObject())->mat;
  cv::Mat image2 = ObjectWrap::Unwrap<Matrix>(args[1]->ToObject())->mat;
+   cv::Mat image1 = Nan::ObjectWrap::Unwrap<Matrix>(info[0]->ToObject())->mat;
  cv::Mat image2 = Nan::ObjectWrap::Unwrap<Matrix>(info[1]->ToObject())->mat;
-   NanCallback *callback = new NanCallback(cb.As<Function>());
+   Nan::Callback *callback = new Nan::Callback(cb.As<Function>());
-   NanAsyncQueueWorker( new AsyncDetectSimilarity(callback, image1, image2) );
  NanReturnUndefined();
+   Nan::AsyncQueueWorker( new AsyncDetectSimilarity(callback, image1, image2) );
  return;

Lines changed in src/Features2d.h

- class Features: public node::ObjectWrap {
+ class Features: public Nan::ObjectWrap {
-   static Persistent<FunctionTemplate> constructor;
+   static Nan::Persistent<FunctionTemplate> constructor;

Lines changed in src/HighGUI.cc

- Persistent<FunctionTemplate> NamedWindow::constructor;
+ Nan::Persistent<FunctionTemplate> NamedWindow::constructor;
-   NanScope();
+   Nan::HandleScope scope;
-   Local<FunctionTemplate> ctor = NanNew<FunctionTemplate>(NamedWindow::New);
  NanAssignPersistent(constructor, ctor);
+   Local<FunctionTemplate> ctor = Nan::New<FunctionTemplate>(NamedWindow::New);
  constructor.Reset(ctor);
-   ctor->SetClassName(NanNew("NamedWindow"));
+   ctor->SetClassName(Nan::New("NamedWindow").ToLocalChecked());
-   NODE_SET_PROTOTYPE_METHOD(ctor, "show", Show);
  NODE_SET_PROTOTYPE_METHOD(ctor, "destroy", Destroy);
  NODE_SET_PROTOTYPE_METHOD(ctor, "blockingWaitKey", BlockingWaitKey);
+   Nan::SetPrototypeMethod(ctor, "show", Show);
  Nan::SetPrototypeMethod(ctor, "destroy", Destroy);
  Nan::SetPrototypeMethod(ctor, "blockingWaitKey", BlockingWaitKey);
-   target->Set(NanNew("NamedWindow"), ctor->GetFunction());
+   target->Set(Nan::New("NamedWindow").ToLocalChecked(), ctor->GetFunction());
-   NanScope();
+   Nan::HandleScope scope;
-   if (args.This()->InternalFieldCount() == 0) {
+   if (info.This()->InternalFieldCount() == 0) {
-   if (args.Length() == 1) {
    win = new NamedWindow(std::string(*NanAsciiString(args[0]->ToString())), 0);
  } else {  //if (args.Length() == 2){
    win = new NamedWindow(std::string(*NanAsciiString(args[0]->ToString())), 0);
+   if (info.Length() == 1) {
    win = new NamedWindow(std::string(*Nan::Utf8String(info[0]->ToString())), 0);
  } else {  //if (info.Length() == 2){
    win = new NamedWindow(std::string(*Nan::Utf8String(info[0]->ToString())), 0);
-   win->Wrap(args.Holder());
  NanReturnValue(args.Holder());
+   win->Wrap(info.Holder());
  info.GetReturnValue().Set(info.Holder());
-   Matrix *im = ObjectWrap::Unwrap<Matrix>(args[0]->ToObject());
+   Matrix *im = Nan::ObjectWrap::Unwrap<Matrix>(info[0]->ToObject());
-     NanThrowError(err_msg);
+     Nan::ThrowError(err_msg);
-   NanReturnValue(args.Holder());
+   info.GetReturnValue().Set(info.Holder());
-   NanReturnValue(args.Holder());
+   info.GetReturnValue().Set(info.Holder());
-   NanScope();
+   Nan::HandleScope scope;
-   if (args.Length() > 1) {
    time = args[1]->IntegerValue();
+   if (info.Length() > 1) {
    time = info[1]->IntegerValue();
-     if (args.Length() > 0) {
      time = args[0]->IntegerValue();
+     if (info.Length() > 0) {
      time = info[0]->IntegerValue();
-   NanReturnValue(NanNew<Number>(res));
+   info.GetReturnValue().Set(Nan::New<Number>(res));

Lines changed in src/HighGUI.h

- class NamedWindow: public node::ObjectWrap {
+ class NamedWindow: public Nan::ObjectWrap {
-   static Persistent<FunctionTemplate> constructor;
+   static Nan::Persistent<FunctionTemplate> constructor;

Lines changed in src/ImgProc.cc

-   Persistent<Object> inner;
  Local<Object> obj = NanNew<Object>();
  NanAssignPersistent(inner, obj);
+   Nan::Persistent<Object> inner;
  Local<Object> obj = Nan::New<Object>();
  inner.Reset(obj);
-   NODE_SET_METHOD(obj, "undistort", Undistort);
  NODE_SET_METHOD(obj, "initUndistortRectifyMap", InitUndistortRectifyMap);
  NODE_SET_METHOD(obj, "remap", Remap);
+   Nan::SetMethod(obj, "undistort", Undistort);
  Nan::SetMethod(obj, "initUndistortRectifyMap", InitUndistortRectifyMap);
  Nan::SetMethod(obj, "remap", Remap);
-   target->Set(NanNew("imgproc"), obj);
+   target->Set(Nan::New("imgproc").ToLocalChecked(), obj);
-   NanEscapableScope();
+   Nan::EscapableHandleScope scope;
-     Matrix* m0 = ObjectWrap::Unwrap<Matrix>(args[0]->ToObject());
+     Matrix* m0 = Nan::ObjectWrap::Unwrap<Matrix>(info[0]->ToObject());
-     Matrix* m1 = ObjectWrap::Unwrap<Matrix>(args[1]->ToObject());
+     Matrix* m1 = Nan::ObjectWrap::Unwrap<Matrix>(info[1]->ToObject());
-     Matrix* m2 = ObjectWrap::Unwrap<Matrix>(args[2]->ToObject());
+     Matrix* m2 = Nan::ObjectWrap::Unwrap<Matrix>(info[2]->ToObject());
-     Local<Object> outMatrixWrap = NanNew(Matrix::constructor)->GetFunction()->NewInstance();
    Matrix *outMatrix = ObjectWrap::Unwrap<Matrix>(outMatrixWrap);
+     Local<Object> outMatrixWrap = Nan::New(Matrix::constructor)->GetFunction()->NewInstance();
    Matrix *outMatrix = Nan::ObjectWrap::Unwrap<Matrix>(outMatrixWrap);
-     NanReturnValue(outMatrixWrap);
+     info.GetReturnValue().Set(outMatrixWrap);
-     NanThrowError(err_msg);
    NanReturnUndefined();
+     Nan::ThrowError(err_msg);
    return;
-   NanEscapableScope();
+   Nan::EscapableHandleScope scope;
-     Matrix* m0 = ObjectWrap::Unwrap<Matrix>(args[0]->ToObject());
+     Matrix* m0 = Nan::ObjectWrap::Unwrap<Matrix>(info[0]->ToObject());
-     Matrix* m1 = ObjectWrap::Unwrap<Matrix>(args[1]->ToObject());
+     Matrix* m1 = Nan::ObjectWrap::Unwrap<Matrix>(info[1]->ToObject());
-     Matrix* m2 = ObjectWrap::Unwrap<Matrix>(args[2]->ToObject());
+     Matrix* m2 = Nan::ObjectWrap::Unwrap<Matrix>(info[2]->ToObject());
-     Matrix* m3 = ObjectWrap::Unwrap<Matrix>(args[3]->ToObject());
+     Matrix* m3 = Nan::ObjectWrap::Unwrap<Matrix>(info[3]->ToObject());
-     if (args[4]->IsArray()) {
      Local<Object> v8sz = args[4]->ToObject();
+     if (info[4]->IsArray()) {
      Local<Object> v8sz = info[4]->ToObject();
-     int m1type = args[5]->IntegerValue();
+     int m1type = info[5]->IntegerValue();
-     Local<Object> map1Wrap = NanNew(Matrix::constructor)->GetFunction()->NewInstance();
    Matrix *map1Matrix = ObjectWrap::Unwrap<Matrix>(map1Wrap);
+     Local<Object> map1Wrap = Nan::New(Matrix::constructor)->GetFunction()->NewInstance();
    Matrix *map1Matrix = Nan::ObjectWrap::Unwrap<Matrix>(map1Wrap);
-     Local<Object> map2Wrap = NanNew(Matrix::constructor)->GetFunction()->NewInstance();
    Matrix *map2Matrix = ObjectWrap::Unwrap<Matrix>(map2Wrap);
+     Local<Object> map2Wrap = Nan::New(Matrix::constructor)->GetFunction()->NewInstance();
    Matrix *map2Matrix = Nan::ObjectWrap::Unwrap<Matrix>(map2Wrap);
-     Local<Object> ret = NanNew<Object>();
    ret->Set(NanNew<String>("map1"), map1Wrap);
    ret->Set(NanNew<String>("map2"), map2Wrap);
+     Local<Object> ret = Nan::New<Object>();
    ret->Set(Nan::New<String>("map1").ToLocalChecked(), map1Wrap);
    ret->Set(Nan::New<String>("map2").ToLocalChecked(), map2Wrap);
-     NanReturnValue(ret);
+     info.GetReturnValue().Set(ret);
-     NanThrowError(err_msg);
    NanReturnUndefined();
+     Nan::ThrowError(err_msg);
    return;
-   NanEscapableScope();
+   Nan::EscapableHandleScope scope;
-     Matrix* m0 = ObjectWrap::Unwrap<Matrix>(args[0]->ToObject());
+     Matrix* m0 = Nan::ObjectWrap::Unwrap<Matrix>(info[0]->ToObject());
-     Matrix* m1 = ObjectWrap::Unwrap<Matrix>(args[1]->ToObject());
+     Matrix* m1 = Nan::ObjectWrap::Unwrap<Matrix>(info[1]->ToObject());
-     Matrix* m2 = ObjectWrap::Unwrap<Matrix>(args[2]->ToObject());
+     Matrix* m2 = Nan::ObjectWrap::Unwrap<Matrix>(info[2]->ToObject());
-     int interpolation = args[3]->IntegerValue();
+     int interpolation = info[3]->IntegerValue();
-     Local<Object> outMatrixWrap = NanNew(Matrix::constructor)->GetFunction()->NewInstance();
    Matrix *outMatrix = ObjectWrap::Unwrap<Matrix>(outMatrixWrap);
+     Local<Object> outMatrixWrap = Nan::New(Matrix::constructor)->GetFunction()->NewInstance();
    Matrix *outMatrix = Nan::ObjectWrap::Unwrap<Matrix>(outMatrixWrap);
-     NanReturnValue(outMatrixWrap);
+     info.GetReturnValue().Set(outMatrixWrap);
-     NanThrowError(err_msg);
    NanReturnUndefined();
+     Nan::ThrowError(err_msg);
    return;

Lines changed in src/ImgProc.h

- class ImgProc: public node::ObjectWrap {
+ class ImgProc: public Nan::ObjectWrap {

Lines changed in src/Matrix.h

- class Matrix: public node::ObjectWrap {
+ class Matrix: public Nan::ObjectWrap {
-   static Persistent<FunctionTemplate> constructor;
+   static Nan::Persistent<FunctionTemplate> constructor;
-    static Handle<Value> Val(const Arguments& args);
   static Handle<Value> RowRange(const Arguments& args);
   static Handle<Value> ColRange(const Arguments& args);
   static Handle<Value> Diag(const Arguments& args);
   static Handle<Value> Clone(const Arguments& args);
   static Handle<Value> CopyTo(const Arguments& args);
   static Handle<Value> ConvertTo(const Arguments& args);
   static Handle<Value> AssignTo(const Arguments& args);
   static Handle<Value> SetTo(const Arguments& args);
   static Handle<Value> Reshape(const Arguments& args);
   static Handle<Value> Transpose(const Arguments& args);
   static Handle<Value> Invert(const Arguments& args);
   static Handle<Value> Multiply(const Arguments& args);
   static Handle<Value> Cross(const Arguments& args);
   static Handle<Value> Dot(const Arguments& args);
   static Handle<Value> Zeroes(const Arguments& args);
   static Handle<Value> Ones(const Arguments& args);
+    static Handle<Value> Val(const Arguments& info);
   static Handle<Value> RowRange(const Arguments& info);
   static Handle<Value> ColRange(const Arguments& info);
   static Handle<Value> Diag(const Arguments& info);
   static Handle<Value> Clone(const Arguments& info);
   static Handle<Value> CopyTo(const Arguments& info);
   static Handle<Value> ConvertTo(const Arguments& info);
   static Handle<Value> AssignTo(const Arguments& info);
   static Handle<Value> SetTo(const Arguments& info);
   static Handle<Value> Reshape(const Arguments& info);
   static Handle<Value> Transpose(const Arguments& info);
   static Handle<Value> Invert(const Arguments& info);
   static Handle<Value> Multiply(const Arguments& info);
   static Handle<Value> Cross(const Arguments& info);
   static Handle<Value> Dot(const Arguments& info);
   static Handle<Value> Zeroes(const Arguments& info);
   static Handle<Value> Ones(const Arguments& info);
-    static Handle<Value> PushBack(const Arguments& args);
   static Handle<Value> PopBack(const Arguments& args);
   static Handle<Value> Total(const Arguments& args);
   static Handle<Value> IsContinous(const Arguments& args);
   static Handle<Value> Type(const Arguments& args);
   static Handle<Value> Depth(const Arguments& args);
   static Handle<Value> Channels(const Arguments& args);
   static Handle<Value> StepOne(const Arguments& args);
   static Handle<Value> GetPerspectiveTransform(const Arguments& args);
   static Handle<Value> WarpPerspective(const Arguments& args);
+    static Handle<Value> PushBack(const Arguments& info);
   static Handle<Value> PopBack(const Arguments& info);
   static Handle<Value> Total(const Arguments& info);
   static Handle<Value> IsContinous(const Arguments& info);
   static Handle<Value> Type(const Arguments& info);
   static Handle<Value> Depth(const Arguments& info);
   static Handle<Value> Channels(const Arguments& info);
   static Handle<Value> StepOne(const Arguments& info);
   static Handle<Value> GetPerspectiveTransform(const Arguments& info);
   static Handle<Value> WarpPerspective(const Arguments& info);

Lines changed in src/OpenCV.cc

-   NanScope();
+   Nan::HandleScope scope;
-   target->Set(NanNew<String>("version"), NanNew<String>(out, n));
+   target->Set(Nan::New<String>("version").ToLocalChecked(), Nan::New<String>(out, n));
-   NODE_SET_METHOD(target, "readImage", ReadImage);
+   Nan::SetMethod(target, "readImage", ReadImage);
-   NanEscapableScope();
+   Nan::EscapableHandleScope scope;
-   argv[0] = NanNull();
+   argv[0] = Nan::Null();
-   Local<Object> im_h = NanNew(Matrix::constructor)->GetFunction()->NewInstance();
  Matrix *img = ObjectWrap::Unwrap<Matrix>(im_h);
+   Local<Object> im_h = Nan::New(Matrix::constructor)->GetFunction()->NewInstance();
  Matrix *img = Nan::ObjectWrap::Unwrap<Matrix>(im_h);
-     if (args[0]->IsNumber() && args[1]->IsNumber()) {
+     if (info[0]->IsNumber() && info[1]->IsNumber()) {
-       width = args[0]->Uint32Value();
      height = args[1]->Uint32Value();
+       width = info[0]->Uint32Value();
      height = info[1]->Uint32Value();
-     } else if (args[0]->IsString()) {
      std::string filename = std::string(*NanUtf8String(args[0]->ToString()));
+     } else if (info[0]->IsString()) {
      std::string filename = std::string(*Nan::Utf8String(info[0]->ToString()));
-     } else if (Buffer::HasInstance(args[0])) {
      uint8_t *buf = (uint8_t *) Buffer::Data(args[0]->ToObject());
      unsigned len = Buffer::Length(args[0]->ToObject());
+     } else if (Buffer::HasInstance(info[0])) {
      uint8_t *buf = (uint8_t *) Buffer::Data(info[0]->ToObject());
      unsigned len = Buffer::Length(info[0]->ToObject());
-         argv[0] = NanError("Error loading file");
+         argv[0] = Nan::Error("Error loading file");
-     argv[0] = NanError(e.what());
    argv[1] = NanNull();
+     argv[0] = Nan::Error(e.what());
    argv[1] = Nan::Null();
-   cb->Call(NanGetCurrentContext()->Global(), 2, argv);
+   cb->Call(Nan::GetCurrentContext()->Global(), 2, argv);
-   NanReturnUndefined();
+   return;

Lines changed in src/OpenCV.h

-   if (args.Length() <= (I) || !args[I]->IsFunction())                   \
    return NanThrowTypeError("Argument " #I " must be a function");  \
  Local<Function> VAR = Local<Function>::Cast(args[I]);
+   if (info.Length() <= (I) || !info[I]->IsFunction())                   \
    return Nan::ThrowTypeError("Argument " #I " must be a function");  \
  Local<Function> VAR = Local<Function>::Cast(info[I]);
- 	NanScope();		\
	TYP *self = ObjectWrap::Unwrap<TYP>(args.This());
+ 	Nan::HandleScope scope;		\
	TYP *self = Nan::ObjectWrap::Unwrap<TYP>(info.This());
-   NanThrowTypeError( ERR );
+   Nan::ThrowTypeError( ERR );
-   NanThrowError( ERR );
+   Nan::ThrowError( ERR );
-   if (args[IND]->IsInt32()){ \
    NAME = args[IND]->Uint32Value(); \
+   if (info[IND]->IsInt32()){ \
    NAME = info[IND]->Uint32Value(); \
-   if (args[IND]->IsInt32()){ \
    NAME = args[IND]->NumberValue(); \
+   if (info[IND]->IsInt32()){ \
    NAME = info[IND]->NumberValue(); \
- class OpenCV: public node::ObjectWrap {
+ class OpenCV: public Nan::ObjectWrap {

Lines changed in src/Matrix.cc

- v8::Persistent<FunctionTemplate> Matrix::constructor;
+ Nan::Persistent<FunctionTemplate> Matrix::constructor;
-   NanScope();
+   Nan::HandleScope scope;
-   Local<FunctionTemplate> ctor = NanNew<FunctionTemplate>(Matrix::New);
  NanAssignPersistent(constructor, ctor);
+   Local<FunctionTemplate> ctor = Nan::New<FunctionTemplate>(Matrix::New);
  constructor.Reset(ctor);
-   ctor->SetClassName(NanNew("Matrix"));
+   ctor->SetClassName(Nan::New("Matrix").ToLocalChecked());
-   NODE_SET_PROTOTYPE_METHOD(ctor, "row", Row);
  NODE_SET_PROTOTYPE_METHOD(ctor, "col", Col);
  NODE_SET_PROTOTYPE_METHOD(ctor, "pixelRow", PixelRow);
  NODE_SET_PROTOTYPE_METHOD(ctor, "pixelCol", PixelCol);
  NODE_SET_PROTOTYPE_METHOD(ctor, "empty", Empty);
  NODE_SET_PROTOTYPE_METHOD(ctor, "get", Get);
  NODE_SET_PROTOTYPE_METHOD(ctor, "set", Set);
  NODE_SET_PROTOTYPE_METHOD(ctor, "put", Put);
  NODE_SET_PROTOTYPE_METHOD(ctor, "brightness", Brightness);
  NODE_SET_PROTOTYPE_METHOD(ctor, "normalize", Normalize);
  NODE_SET_PROTOTYPE_METHOD(ctor, "getData", GetData);
  NODE_SET_PROTOTYPE_METHOD(ctor, "pixel", Pixel);
  NODE_SET_PROTOTYPE_METHOD(ctor, "width", Width);
  NODE_SET_PROTOTYPE_METHOD(ctor, "height", Height);
  NODE_SET_PROTOTYPE_METHOD(ctor, "size", Size);
  NODE_SET_PROTOTYPE_METHOD(ctor, "clone", Clone);
  NODE_SET_PROTOTYPE_METHOD(ctor, "crop", Crop);
  NODE_SET_PROTOTYPE_METHOD(ctor, "toBuffer", ToBuffer);
  NODE_SET_PROTOTYPE_METHOD(ctor, "toBufferAsync", ToBufferAsync);
  NODE_SET_PROTOTYPE_METHOD(ctor, "ellipse", Ellipse);
  NODE_SET_PROTOTYPE_METHOD(ctor, "rectangle", Rectangle);
  NODE_SET_PROTOTYPE_METHOD(ctor, "line", Line);
  NODE_SET_PROTOTYPE_METHOD(ctor, "fillPoly", FillPoly);
  NODE_SET_PROTOTYPE_METHOD(ctor, "save", Save);
  NODE_SET_PROTOTYPE_METHOD(ctor, "saveAsync", SaveAsync);
  NODE_SET_PROTOTYPE_METHOD(ctor, "resize", Resize);
  NODE_SET_PROTOTYPE_METHOD(ctor, "rotate", Rotate);
  NODE_SET_PROTOTYPE_METHOD(ctor, "copyTo", CopyTo);
  NODE_SET_PROTOTYPE_METHOD(ctor, "pyrDown", PyrDown);
  NODE_SET_PROTOTYPE_METHOD(ctor, "pyrUp", PyrUp);
  NODE_SET_PROTOTYPE_METHOD(ctor, "channels", Channels);
  NODE_SET_PROTOTYPE_METHOD(ctor, "convertGrayscale", ConvertGrayscale);
  NODE_SET_PROTOTYPE_METHOD(ctor, "convertHSVscale", ConvertHSVscale);
  NODE_SET_PROTOTYPE_METHOD(ctor, "gaussianBlur", GaussianBlur);
  NODE_SET_PROTOTYPE_METHOD(ctor, "medianBlur", MedianBlur);
  NODE_SET_PROTOTYPE_METHOD(ctor, "bilateralFilter", BilateralFilter);
  NODE_SET_PROTOTYPE_METHOD(ctor, "copy", Copy);
  NODE_SET_PROTOTYPE_METHOD(ctor, "flip", Flip);
  NODE_SET_PROTOTYPE_METHOD(ctor, "roi", ROI);
  NODE_SET_PROTOTYPE_METHOD(ctor, "ptr", Ptr);
  NODE_SET_PROTOTYPE_METHOD(ctor, "absDiff", AbsDiff);
  NODE_SET_PROTOTYPE_METHOD(ctor, "addWeighted", AddWeighted);
  NODE_SET_PROTOTYPE_METHOD(ctor, "bitwiseXor", BitwiseXor);
  NODE_SET_PROTOTYPE_METHOD(ctor, "bitwiseNot", BitwiseNot);
  NODE_SET_PROTOTYPE_METHOD(ctor, "bitwiseAnd", BitwiseAnd);
  NODE_SET_PROTOTYPE_METHOD(ctor, "countNonZero", CountNonZero);
  NODE_SET_PROTOTYPE_METHOD(ctor, "canny", Canny);
  NODE_SET_PROTOTYPE_METHOD(ctor, "dilate", Dilate);
  NODE_SET_PROTOTYPE_METHOD(ctor, "erode", Erode);
  NODE_SET_PROTOTYPE_METHOD(ctor, "findContours", FindContours);
  NODE_SET_PROTOTYPE_METHOD(ctor, "drawContour", DrawContour);
  NODE_SET_PROTOTYPE_METHOD(ctor, "drawAllContours", DrawAllContours);
  NODE_SET_PROTOTYPE_METHOD(ctor, "goodFeaturesToTrack", GoodFeaturesToTrack);
  NODE_SET_PROTOTYPE_METHOD(ctor, "houghLinesP", HoughLinesP);
  NODE_SET_PROTOTYPE_METHOD(ctor, "crop", Crop);
  NODE_SET_PROTOTYPE_METHOD(ctor, "houghCircles", HoughCircles);
  NODE_SET_PROTOTYPE_METHOD(ctor, "inRange", inRange);
  NODE_SET_PROTOTYPE_METHOD(ctor, "adjustROI", AdjustROI);
  NODE_SET_PROTOTYPE_METHOD(ctor, "locateROI", LocateROI);
  NODE_SET_PROTOTYPE_METHOD(ctor, "threshold", Threshold);
  NODE_SET_PROTOTYPE_METHOD(ctor, "adaptiveThreshold", AdaptiveThreshold);
  NODE_SET_PROTOTYPE_METHOD(ctor, "meanStdDev", MeanStdDev);
  NODE_SET_PROTOTYPE_METHOD(ctor, "cvtColor", CvtColor);
  NODE_SET_PROTOTYPE_METHOD(ctor, "split", Split);
  NODE_SET_PROTOTYPE_METHOD(ctor, "merge", Merge);
  NODE_SET_PROTOTYPE_METHOD(ctor, "equalizeHist", EqualizeHist);
  NODE_SET_PROTOTYPE_METHOD(ctor, "floodFill", FloodFill);
  NODE_SET_PROTOTYPE_METHOD(ctor, "matchTemplate", MatchTemplate);
  NODE_SET_PROTOTYPE_METHOD(ctor, "templateMatches", TemplateMatches);
  NODE_SET_PROTOTYPE_METHOD(ctor, "minMaxLoc", MinMaxLoc);
  NODE_SET_PROTOTYPE_METHOD(ctor, "pushBack", PushBack);
  NODE_SET_PROTOTYPE_METHOD(ctor, "putText", PutText);
  NODE_SET_PROTOTYPE_METHOD(ctor, "getPerspectiveTransform", GetPerspectiveTransform);
  NODE_SET_PROTOTYPE_METHOD(ctor, "warpPerspective", WarpPerspective);
  NODE_SET_METHOD(ctor, "Zeros", Zeros);
  NODE_SET_METHOD(ctor, "Ones", Ones);
  NODE_SET_METHOD(ctor, "Eye", Eye);
  NODE_SET_PROTOTYPE_METHOD(ctor, "copyWithMask", CopyWithMask);
  NODE_SET_PROTOTYPE_METHOD(ctor, "setWithMask", SetWithMask);
  NODE_SET_PROTOTYPE_METHOD(ctor, "meanWithMask", MeanWithMask);
  NODE_SET_PROTOTYPE_METHOD(ctor, "shift", Shift);
  NODE_SET_PROTOTYPE_METHOD(ctor, "release", Release);
+   Nan::SetPrototypeMethod(ctor, "row", Row);
  Nan::SetPrototypeMethod(ctor, "col", Col);
  Nan::SetPrototypeMethod(ctor, "pixelRow", PixelRow);
  Nan::SetPrototypeMethod(ctor, "pixelCol", PixelCol);
  Nan::SetPrototypeMethod(ctor, "empty", Empty);
  Nan::SetPrototypeMethod(ctor, "get", Get);
  Nan::SetPrototypeMethod(ctor, "set", Set);
  Nan::SetPrototypeMethod(ctor, "put", Put);
  Nan::SetPrototypeMethod(ctor, "brightness", Brightness);
  Nan::SetPrototypeMethod(ctor, "normalize", Normalize);
  Nan::SetPrototypeMethod(ctor, "getData", GetData);
  Nan::SetPrototypeMethod(ctor, "pixel", Pixel);
  Nan::SetPrototypeMethod(ctor, "width", Width);
  Nan::SetPrototypeMethod(ctor, "height", Height);
  Nan::SetPrototypeMethod(ctor, "size", Size);
  Nan::SetPrototypeMethod(ctor, "clone", Clone);
  Nan::SetPrototypeMethod(ctor, "crop", Crop);
  Nan::SetPrototypeMethod(ctor, "toBuffer", ToBuffer);
  Nan::SetPrototypeMethod(ctor, "toBufferAsync", ToBufferAsync);
  Nan::SetPrototypeMethod(ctor, "ellipse", Ellipse);
  Nan::SetPrototypeMethod(ctor, "rectangle", Rectangle);
  Nan::SetPrototypeMethod(ctor, "line", Line);
  Nan::SetPrototypeMethod(ctor, "fillPoly", FillPoly);
  Nan::SetPrototypeMethod(ctor, "save", Save);
  Nan::SetPrototypeMethod(ctor, "saveAsync", SaveAsync);
  Nan::SetPrototypeMethod(ctor, "resize", Resize);
  Nan::SetPrototypeMethod(ctor, "rotate", Rotate);
  Nan::SetPrototypeMethod(ctor, "copyTo", CopyTo);
  Nan::SetPrototypeMethod(ctor, "pyrDown", PyrDown);
  Nan::SetPrototypeMethod(ctor, "pyrUp", PyrUp);
  Nan::SetPrototypeMethod(ctor, "channels", Channels);
  Nan::SetPrototypeMethod(ctor, "convertGrayscale", ConvertGrayscale);
  Nan::SetPrototypeMethod(ctor, "convertHSVscale", ConvertHSVscale);
  Nan::SetPrototypeMethod(ctor, "gaussianBlur", GaussianBlur);
  Nan::SetPrototypeMethod(ctor, "medianBlur", MedianBlur);
  Nan::SetPrototypeMethod(ctor, "bilateralFilter", BilateralFilter);
  Nan::SetPrototypeMethod(ctor, "copy", Copy);
  Nan::SetPrototypeMethod(ctor, "flip", Flip);
  Nan::SetPrototypeMethod(ctor, "roi", ROI);
  Nan::SetPrototypeMethod(ctor, "ptr", Ptr);
  Nan::SetPrototypeMethod(ctor, "absDiff", AbsDiff);
  Nan::SetPrototypeMethod(ctor, "addWeighted", AddWeighted);
  Nan::SetPrototypeMethod(ctor, "bitwiseXor", BitwiseXor);
  Nan::SetPrototypeMethod(ctor, "bitwiseNot", BitwiseNot);
  Nan::SetPrototypeMethod(ctor, "bitwiseAnd", BitwiseAnd);
  Nan::SetPrototypeMethod(ctor, "countNonZero", CountNonZero);
  Nan::SetPrototypeMethod(ctor, "canny", Canny);
  Nan::SetPrototypeMethod(ctor, "dilate", Dilate);
  Nan::SetPrototypeMethod(ctor, "erode", Erode);
  Nan::SetPrototypeMethod(ctor, "findContours", FindContours);
  Nan::SetPrototypeMethod(ctor, "drawContour", DrawContour);
  Nan::SetPrototypeMethod(ctor, "drawAllContours", DrawAllContours);
  Nan::SetPrototypeMethod(ctor, "goodFeaturesToTrack", GoodFeaturesToTrack);
  Nan::SetPrototypeMethod(ctor, "houghLinesP", HoughLinesP);
  Nan::SetPrototypeMethod(ctor, "crop", Crop);
  Nan::SetPrototypeMethod(ctor, "houghCircles", HoughCircles);
  Nan::SetPrototypeMethod(ctor, "inRange", inRange);
  Nan::SetPrototypeMethod(ctor, "adjustROI", AdjustROI);
  Nan::SetPrototypeMethod(ctor, "locateROI", LocateROI);
  Nan::SetPrototypeMethod(ctor, "threshold", Threshold);
  Nan::SetPrototypeMethod(ctor, "adaptiveThreshold", AdaptiveThreshold);
  Nan::SetPrototypeMethod(ctor, "meanStdDev", MeanStdDev);
  Nan::SetPrototypeMethod(ctor, "cvtColor", CvtColor);
  Nan::SetPrototypeMethod(ctor, "split", Split);
  Nan::SetPrototypeMethod(ctor, "merge", Merge);
  Nan::SetPrototypeMethod(ctor, "equalizeHist", EqualizeHist);
  Nan::SetPrototypeMethod(ctor, "floodFill", FloodFill);
  Nan::SetPrototypeMethod(ctor, "matchTemplate", MatchTemplate);
  Nan::SetPrototypeMethod(ctor, "templateMatches", TemplateMatches);
  Nan::SetPrototypeMethod(ctor, "minMaxLoc", MinMaxLoc);
  Nan::SetPrototypeMethod(ctor, "pushBack", PushBack);
  Nan::SetPrototypeMethod(ctor, "putText", PutText);
  Nan::SetPrototypeMethod(ctor, "getPerspectiveTransform", GetPerspectiveTransform);
  Nan::SetPrototypeMethod(ctor, "warpPerspective", WarpPerspective);
  Nan::SetMethod(ctor, "Zeros", Zeros);
  Nan::SetMethod(ctor, "Ones", Ones);
  Nan::SetMethod(ctor, "Eye", Eye);
  Nan::SetPrototypeMethod(ctor, "copyWithMask", CopyWithMask);
  Nan::SetPrototypeMethod(ctor, "setWithMask", SetWithMask);
  Nan::SetPrototypeMethod(ctor, "meanWithMask", MeanWithMask);
  Nan::SetPrototypeMethod(ctor, "shift", Shift);
  Nan::SetPrototypeMethod(ctor, "release", Release);
-   target->Set(NanNew("Matrix"), ctor->GetFunction());
+   target->Set(Nan::New("Matrix").ToLocalChecked(), ctor->GetFunction());
-   NanScope();
  if (args.This()->InternalFieldCount() == 0) {
    NanThrowTypeError("Cannot instantiate without new");
+   Nan::HandleScope scope;
  if (info.This()->InternalFieldCount() == 0) {
    Nan::ThrowTypeError("Cannot instantiate without new");
-   if (args.Length() == 0) {
+   if (info.Length() == 0) {
-   } else if (args.Length() == 2 && args[0]->IsInt32() && args[1]->IsInt32()) {
    mat = new Matrix(args[0]->IntegerValue(), args[1]->IntegerValue());
  } else if (args.Length() == 3 && args[0]->IsInt32() && args[1]->IsInt32()
      && args[2]->IsInt32()) {
    mat = new Matrix(args[0]->IntegerValue(), args[1]->IntegerValue(),
        args[2]->IntegerValue());
  } else if (args.Length() == 4 && args[0]->IsInt32() && args[1]->IsInt32() &&
        args[2]->IsInt32() && args[3]->IsArray()) {
  } else {  // if (args.Length() == 5) {
    Matrix *other = ObjectWrap::Unwrap<Matrix>(args[0]->ToObject());
    int x = args[1]->IntegerValue();
    int y = args[2]->IntegerValue();
    int w = args[3]->IntegerValue();
    int h = args[4]->IntegerValue();
+   } else if (info.Length() == 2 && info[0]->IsInt32() && info[1]->IsInt32()) {
    mat = new Matrix(info[0]->IntegerValue(), info[1]->IntegerValue());
  } else if (info.Length() == 3 && info[0]->IsInt32() && info[1]->IsInt32()
      && info[2]->IsInt32()) {
    mat = new Matrix(info[0]->IntegerValue(), info[1]->IntegerValue(),
        info[2]->IntegerValue());
  } else if (info.Length() == 4 && info[0]->IsInt32() && info[1]->IsInt32() &&
        info[2]->IsInt32() && info[3]->IsArray()) {
  } else {  // if (info.Length() == 5) {
    Matrix *other = Nan::ObjectWrap::Unwrap<Matrix>(info[0]->ToObject());
    int x = info[1]->IntegerValue();
    int y = info[2]->IntegerValue();
    int w = info[3]->IntegerValue();
    int h = info[4]->IntegerValue();
-   mat->Wrap(args.Holder());
  NanReturnValue(args.Holder());
+   mat->Wrap(info.Holder());
  info.GetReturnValue().Set(info.Holder());
-     ObjectWrap() {
+     Nan::ObjectWrap() {
-     ObjectWrap() {
+     Nan::ObjectWrap() {
-     ObjectWrap() {
+     Nan::ObjectWrap() {
-     ObjectWrap() {
+     Nan::ObjectWrap() {
-     NanThrowError("Only 1-3 channels are supported");
+     Nan::ThrowError("Only 1-3 channels are supported");
-   NanReturnValue(NanNew<Boolean>(self->mat.empty()));
+   info.GetReturnValue().Set(Nan::New<Boolean>(self->mat.empty()));
-   int y = args[0]->IntegerValue();
  int x = args[1]->IntegerValue();
+   int y = info[0]->IntegerValue();
  int x = info[1]->IntegerValue();
-   if (args.Length() == 3) {
    Local < Object > objColor = args[2]->ToObject();
+   if (info.Length() == 3) {
    Local < Object > objColor = info[2]->ToObject();
-     NanReturnValue(args[2]->ToObject());
+     info.GetReturnValue().Set(info[2]->ToObject());
-       v8::Local < v8::Array > arr = NanNew<v8::Array>(3);
      arr->Set(0, NanNew<Number>(intensity[0]));
      arr->Set(1, NanNew<Number>(intensity[1]));
      arr->Set(2, NanNew<Number>(intensity[2]));
      NanReturnValue(arr);
+       v8::Local < v8::Array > arr = Nan::New<v8::Array>(3);
      arr->Set(0, Nan::New<Number>(intensity[0]));
      arr->Set(1, Nan::New<Number>(intensity[1]));
      arr->Set(2, Nan::New<Number>(intensity[2]));
      info.GetReturnValue().Set(arr);
-       NanReturnValue(NanNew<Number>(intensity));
+       info.GetReturnValue().Set(Nan::New<Number>(intensity));
-   NanReturnUndefined();
+   return;
-   // NanReturnValue(NanNew<Number>(val));
+   // info.GetReturnValue().Set(Nan::New<Number>(val));
-   int i = args[0]->IntegerValue();
  int j = args[1]->IntegerValue();
+   int i = info[0]->IntegerValue();
  int j = info[1]->IntegerValue();
-   NanReturnValue(NanNew<Number>(val));
+   info.GetReturnValue().Set(Nan::New<Number>(val));
-   int i = args[0]->IntegerValue();
  int j = args[1]->IntegerValue();
  double val = args[2]->NumberValue();
+   int i = info[0]->IntegerValue();
  int j = info[1]->IntegerValue();
  double val = info[2]->NumberValue();
-   if (args.Length() == 4) {
    self->mat.at<cv::Vec3b>(i, j)[args[3]->NumberValue()] = val;
  } else if (args.Length() == 3) {
+   if (info.Length() == 4) {
    self->mat.at<cv::Vec3b>(i, j)[info[3]->NumberValue()] = val;
  } else if (info.Length() == 3) {
-     NanThrowTypeError("Invalid number of arguments");
+     Nan::ThrowTypeError("Invalid number of arguments");
-   NanReturnUndefined();
+   return;
-   if (!Buffer::HasInstance(args[0])) {
    NanThrowTypeError("Not a buffer");
+   if (!Buffer::HasInstance(info[0])) {
    Nan::ThrowTypeError("Not a buffer");
-   const char* buffer_data = Buffer::Data(args[0]);
  size_t buffer_length = Buffer::Length(args[0]);
+   const char* buffer_data = Buffer::Data(info[0]);
  size_t buffer_length = Buffer::Length(info[0]);
-   NanReturnUndefined();
+   return;
-   NanScope();
+   Nan::HandleScope scope;
-   Matrix *self = ObjectWrap::Unwrap<Matrix>(args.This());
+   Matrix *self = Nan::ObjectWrap::Unwrap<Matrix>(info.This());
-   Local<Object> buf = NanNewBufferHandle(size);
+   Local<Object> buf = Nan::NewBuffer(size).ToLocalChecked();
-   v8::Local<v8::Object> globalObj = NanGetCurrentContext()->Global();
  v8::Local<v8::Function> bufferConstructor = v8::Local<v8::Function>::Cast(globalObj->Get(NanNew<String>("Buffer")));
  v8::Handle<v8::Value> constructorArgs[3] = {buf, NanNew<v8::Integer>((unsigned) size), NanNew<v8::Integer>(0)};
+   v8::Local<v8::Object> globalObj = Nan::GetCurrentContext()->Global();
  v8::Local<v8::Function> bufferConstructor = v8::Local<v8::Function>::Cast(globalObj->Get(Nan::New<String>("Buffer").ToLocalChecked()));
  v8::Handle<v8::Value> constructorArgs[3] = {buf, Nan::New<v8::Integer>((unsigned) size), Nan::New<v8::Integer>(0)};
-   NanReturnValue(actualBuffer);
+   info.GetReturnValue().Set(actualBuffer);
-   NanScope();
  Matrix *self = ObjectWrap::Unwrap<Matrix>(args.This());
+   Nan::HandleScope scope;
  Matrix *self = Nan::ObjectWrap::Unwrap<Matrix>(info.This());
-   if (args.Length() == 2) {
+   if (info.Length() == 2) {
-       NanThrowError("those channels are not supported");
+       Nan::ThrowError("those channels are not supported");
-     double alpha = args[0]->NumberValue();
    int beta = args[1]->IntegerValue();
+     double alpha = info[0]->NumberValue();
    int beta = info[1]->IntegerValue();
-     if (args.Length() == 1) {
      int diff = args[0]->IntegerValue();
+     if (info.Length() == 1) {
      int diff = info[0]->IntegerValue();
-       NanReturnValue(NanNew("Insufficient or wrong arguments"));
+       info.GetReturnValue().Set(Nan::New("Insufficient or wrong arguments").ToLocalChecked());
-   NanReturnNull();
+   info.GetReturnValue().Set(Nan::Null());
-   if (!args[0]->IsNumber()) {
    NanThrowTypeError("min is required (argument 1)");
+   if (!info[0]->IsNumber()) {
    Nan::ThrowTypeError("min is required (argument 1)");
-   if (!args[1]->IsNumber()) {
    NanThrowTypeError("max is required (argument 2)");
+   if (!info[1]->IsNumber()) {
    Nan::ThrowTypeError("max is required (argument 2)");
-   if (args[2]->IsNumber()) {
    type = args[2]->Uint32Value();
+   if (info[2]->IsNumber()) {
    type = info[2]->Uint32Value();
-       NanThrowTypeError("type value must be NORM_INF=1, NORM_L1=2, NORM_L2=4,"
+       Nan::ThrowTypeError("type value must be NORM_INF=1, NORM_L1=2, NORM_L2=4,"
-   if (args[3]->IsNumber()) {
    dtype = args[3]->IntegerValue();
+   if (info[3]->IsNumber()) {
    dtype = info[3]->IntegerValue();
-   double min = args[0]->NumberValue();
  double max = args[1]->NumberValue();
+   double min = info[0]->NumberValue();
  double max = info[1]->NumberValue();
-   Matrix *self = ObjectWrap::Unwrap<Matrix>(args.This());
+   Matrix *self = Nan::ObjectWrap::Unwrap<Matrix>(info.This());
-   if (args[4]->IsObject()) {
    Matrix *mmask = ObjectWrap::Unwrap<Matrix>(args[4]->ToObject());
+   if (info[4]->IsObject()) {
    Matrix *mmask = Nan::ObjectWrap::Unwrap<Matrix>(info[4]->ToObject());
-   NanReturnNull();
+   info.GetReturnValue().Set(Nan::Null());
-   v8::Local < v8::Array > arr = NanNew<Array>(2);
  arr->Set(0, NanNew<Number>(self->mat.size().height));
  arr->Set(1, NanNew<Number>(self->mat.size().width));
+   v8::Local < v8::Array > arr = Nan::New<Array>(2);
  arr->Set(0, Nan::New<Number>(self->mat.size().height));
  arr->Set(1, Nan::New<Number>(self->mat.size().width));
-   NanReturnValue(arr);
+   info.GetReturnValue().Set(arr);
-       NanNew(Matrix::constructor)->GetFunction()->NewInstance();
+       Nan::New(Matrix::constructor)->GetFunction()->NewInstance();
-   Matrix *m = ObjectWrap::Unwrap<Matrix>(im_h);
+   Matrix *m = Nan::ObjectWrap::Unwrap<Matrix>(im_h);
-   NanReturnValue(im_h);
+   info.GetReturnValue().Set(im_h);
-   if ((args.Length() == 4) && (args[0]->IsNumber()) && (args[1]->IsNumber())
      && (args[2]->IsNumber()) && (args[3]->IsNumber())) {
+   if ((info.Length() == 4) && (info[0]->IsNumber()) && (info[1]->IsNumber())
      && (info[2]->IsNumber()) && (info[3]->IsNumber())) {
-     int x = args[0]->IntegerValue();
    int y = args[1]->IntegerValue();
    int width = args[2]->IntegerValue();
    int height = args[3]->IntegerValue();
+     int x = info[0]->IntegerValue();
    int y = info[1]->IntegerValue();
    int width = info[2]->IntegerValue();
    int height = info[3]->IntegerValue();
-         NanNew(Matrix::constructor)->GetFunction()->NewInstance();
    Matrix *m = ObjectWrap::Unwrap<Matrix>(im_h);
+         Nan::New(Matrix::constructor)->GetFunction()->NewInstance();
    Matrix *m = Nan::ObjectWrap::Unwrap<Matrix>(im_h);
-     NanReturnValue(im_h);
+     info.GetReturnValue().Set(im_h);
-     NanReturnValue(NanNew("Insufficient or wrong arguments"));
+     info.GetReturnValue().Set(Nan::New("Insufficient or wrong arguments").ToLocalChecked());
-   int y = args[0]->IntegerValue();
  v8::Local < v8::Array > arr = NanNew<Array>(width);
+   int y = info[0]->IntegerValue();
  v8::Local < v8::Array > arr = Nan::New<Array>(width);
-     arr->Set(x, NanNew<Number>(v));
+     arr->Set(x, Nan::New<Number>(v));
-   NanReturnValue(arr);
+   info.GetReturnValue().Set(arr);
-   int y = args[0]->IntegerValue();
  v8::Local < v8::Array > arr = NanNew<Array>(width * 3);
+   int y = info[0]->IntegerValue();
  v8::Local < v8::Array > arr = Nan::New<Array>(width * 3);
-     arr->Set(offset, NanNew<Number>((double) pixel.val[0]));
    arr->Set(offset + 1, NanNew<Number>((double) pixel.val[1]));
    arr->Set(offset + 2, NanNew<Number>((double) pixel.val[2]));
+     arr->Set(offset, Nan::New<Number>((double) pixel.val[0]));
    arr->Set(offset + 1, Nan::New<Number>((double) pixel.val[1]));
    arr->Set(offset + 2, Nan::New<Number>((double) pixel.val[2]));
-   NanReturnValue(arr);
+   info.GetReturnValue().Set(arr);
-   int x = args[0]->IntegerValue();
  v8::Local < v8::Array > arr = NanNew<Array>(height);
+   int x = info[0]->IntegerValue();
  v8::Local < v8::Array > arr = Nan::New<Array>(height);
-     arr->Set(y, NanNew<Number>(v));
+     arr->Set(y, Nan::New<Number>(v));
-   NanReturnValue(arr);
+   info.GetReturnValue().Set(arr);
-   int x = args[0]->IntegerValue();
  v8::Local < v8::Array > arr = NanNew<Array>(height * 3);
+   int x = info[0]->IntegerValue();
  v8::Local < v8::Array > arr = Nan::New<Array>(height * 3);
-     arr->Set(offset, NanNew<Number>((double) pixel.val[0]));
    arr->Set(offset + 1, NanNew<Number>((double) pixel.val[1]));
    arr->Set(offset + 2, NanNew<Number>((double) pixel.val[2]));
+     arr->Set(offset, Nan::New<Number>((double) pixel.val[0]));
    arr->Set(offset + 1, Nan::New<Number>((double) pixel.val[1]));
    arr->Set(offset + 2, Nan::New<Number>((double) pixel.val[2]));
-   NanReturnValue(arr);
+   info.GetReturnValue().Set(arr);
-   NanReturnValue(NanNew<Number>(self->mat.size().width));
+   info.GetReturnValue().Set(Nan::New<Number>(self->mat.size().width));
-   NanReturnValue(NanNew<Number>(self->mat.size().height));
+   info.GetReturnValue().Set(Nan::New<Number>(self->mat.size().height));
-   NanReturnValue(NanNew<Number>(self->mat.channels()));
+   info.GetReturnValue().Set(Nan::New<Number>(self->mat.channels()));
-   if ((args.Length() > 0) && (args[0]->IsFunction())) {
    return Matrix::ToBufferAsync(args);
+   if ((info.Length() > 0) && (info[0]->IsFunction())) {
    return Matrix::ToBufferAsync(info);
-   if ((args.Length() > 0) && (args[0]->IsObject())) {
+   if ((info.Length() > 0) && (info[0]->IsObject())) {
-     v8::Handle < v8::Object > options = v8::Handle<v8::Object>::Cast(args[0]);
+     v8::Handle < v8::Object > options = v8::Handle<v8::Object>::Cast(info[0]);
-     if (options->Has(NanNew<String>("ext"))) {
+     if (options->Has(Nan::New<String>("ext").ToLocalChecked())) {
-           options->Get(NanNew<String>("ext"))->ToString());
+           options->Get(Nan::New<String>("ext").ToLocalChecked())->ToString());
-     if (options->Has(NanNew<String>("jpegQuality"))) {
+     if (options->Has(Nan::New<String>("jpegQuality").ToLocalChecked())) {
-           options->Get(NanNew<String>("jpegQuality"))->IntegerValue();
+           options->Get(Nan::New<String>("jpegQuality").ToLocalChecked())->IntegerValue();
-     if (options->Has(NanNew<String>("pngCompression"))) {
+     if (options->Has(Nan::New<String>("pngCompression").ToLocalChecked())) {
-           options->Get(NanNew<String>("pngCompression"))->IntegerValue();
+           options->Get(Nan::New<String>("pngCompression").ToLocalChecked())->IntegerValue();
-   Local < Object > buf = NanNewBufferHandle(vec.size());
+   Local < Object > buf = Nan::NewBuffer(vec.size()).ToLocalChecked();
-   v8::Local < v8::Object > globalObj = NanGetCurrentContext()->Global();
+   v8::Local < v8::Object > globalObj = Nan::GetCurrentContext()->Global();
-       > ::Cast(globalObj->Get(NanNew<String>("Buffer")));
+       > ::Cast(globalObj->Get(Nan::New<String>("Buffer").ToLocalChecked()));
-       {buf, NanNew<v8::Integer>((unsigned)vec.size()), NanNew<v8::Integer>(0)};
+       {buf, Nan::New<v8::Integer>((unsigned)vec.size()), Nan::New<v8::Integer>(0)};
-   NanReturnValue(actualBuffer);
+   info.GetReturnValue().Set(actualBuffer);
- class AsyncToBufferWorker: public NanAsyncWorker {
+ class AsyncToBufferWorker: public Nan::AsyncWorker {
-   AsyncToBufferWorker(NanCallback *callback, Matrix* matrix, string ext,
+   AsyncToBufferWorker(Nan::Callback *callback, Matrix* matrix, string ext,
-       NanAsyncWorker(callback),
+       Nan::AsyncWorker(callback),
-     NanScope();
+     Nan::HandleScope scope;
-     Local<Object> buf = NanNewBufferHandle(res.size());
+     Local<Object> buf = Nan::NewBuffer(res.size()).ToLocalChecked();
-     v8::Local<v8::Object> globalObj = NanGetCurrentContext()->Global();
    v8::Local<v8::Function> bufferConstructor = v8::Local<v8::Function>::Cast(globalObj->Get(NanNew<String>("Buffer")));
    v8::Handle<v8::Value> constructorArgs[3] = {buf, NanNew<v8::Integer>((unsigned)res.size()), NanNew<v8::Integer>(0)};
+     v8::Local<v8::Object> globalObj = Nan::GetCurrentContext()->Global();
    v8::Local<v8::Function> bufferConstructor = v8::Local<v8::Function>::Cast(globalObj->Get(Nan::New<String>("Buffer").ToLocalChecked()));
    v8::Handle<v8::Value> constructorArgs[3] = {buf, Nan::New<v8::Integer>((unsigned)res.size()), Nan::New<v8::Integer>(0)};
-       NanNull(),
+       Nan::Null(),
-   if ((args.Length() > 1) && (args[1]->IsObject())) {
+   if ((info.Length() > 1) && (info[1]->IsObject())) {
-     v8::Handle < v8::Object > options = v8::Handle<v8::Object>::Cast(args[1]);
+     v8::Handle < v8::Object > options = v8::Handle<v8::Object>::Cast(info[1]);
-     if (options->Has(NanNew<String>("ext"))) {
+     if (options->Has(Nan::New<String>("ext").ToLocalChecked())) {
-           options->Get(NanNew<String>("ext"))->ToString());
+           options->Get(Nan::New<String>("ext").ToLocalChecked())->ToString());
-     if (options->Has(NanNew<String>("jpegQuality"))) {
+     if (options->Has(Nan::New<String>("jpegQuality").ToLocalChecked())) {
-           options->Get(NanNew<String>("jpegQuality"))->IntegerValue();
+           options->Get(Nan::New<String>("jpegQuality").ToLocalChecked())->IntegerValue();
-     if (options->Has(NanNew<String>("pngCompression"))) {
+     if (options->Has(Nan::New<String>("pngCompression").ToLocalChecked())) {
-           options->Get(NanNew<String>("pngCompression"))->IntegerValue();
+           options->Get(Nan::New<String>("pngCompression").ToLocalChecked())->IntegerValue();
-   NanCallback *callback = new NanCallback(cb.As<Function>());
  NanAsyncQueueWorker(new AsyncToBufferWorker(callback, self, ext, params));
+   Nan::Callback *callback = new Nan::Callback(cb.As<Function>());
  Nan::AsyncQueueWorker(new AsyncToBufferWorker(callback, self, ext, params));
-   NanReturnUndefined();
+   return;
-   if (args[0]->IsObject()) {
    v8::Handle < v8::Object > options = v8::Handle<v8::Object>::Cast(args[0]);
    if (options->Has(NanNew<String>("center"))) {
+   if (info[0]->IsObject()) {
    v8::Handle < v8::Object > options = v8::Handle<v8::Object>::Cast(info[0]);
    if (options->Has(Nan::New<String>("center").ToLocalChecked())) {
-           options->Get(NanNew<String>("center"))->ToObject();
      x = center->Get(NanNew<String>("x"))->Uint32Value();
      y = center->Get(NanNew<String>("y"))->Uint32Value();
+           options->Get(Nan::New<String>("center").ToLocalChecked())->ToObject();
      x = center->Get(Nan::New<String>("x").ToLocalChecked())->Uint32Value();
      y = center->Get(Nan::New<String>("y").ToLocalChecked())->Uint32Value();
-     if (options->Has(NanNew<String>("axes"))) {
      Local < Object > axes = options->Get(NanNew<String>("axes"))->ToObject();
      width = axes->Get(NanNew<String>("width"))->Uint32Value();
      height = axes->Get(NanNew<String>("height"))->Uint32Value();
+     if (options->Has(Nan::New<String>("axes").ToLocalChecked())) {
      Local < Object > axes = options->Get(Nan::New<String>("axes").ToLocalChecked())->ToObject();
      width = axes->Get(Nan::New<String>("width").ToLocalChecked())->Uint32Value();
      height = axes->Get(Nan::New<String>("height").ToLocalChecked())->Uint32Value();
-     if (options->Has(NanNew<String>("thickness"))) {
      thickness = options->Get(NanNew<String>("thickness"))->Uint32Value();
+     if (options->Has(Nan::New<String>("thickness").ToLocalChecked())) {
      thickness = options->Get(Nan::New<String>("thickness").ToLocalChecked())->Uint32Value();
-     if (options->Has(NanNew<String>("angle"))) {
      angle = options->Get(NanNew<String>("angle"))->NumberValue();
+     if (options->Has(Nan::New<String>("angle").ToLocalChecked())) {
      angle = options->Get(Nan::New<String>("angle").ToLocalChecked())->NumberValue();
-     if (options->Has(NanNew<String>("startAngle"))) {
      startAngle = options->Get(NanNew<String>("startAngle"))->NumberValue();
+     if (options->Has(Nan::New<String>("startAngle").ToLocalChecked())) {
      startAngle = options->Get(Nan::New<String>("startAngle").ToLocalChecked())->NumberValue();
-     if (options->Has(NanNew<String>("endAngle"))) {
      endAngle = options->Get(NanNew<String>("endAngle"))->NumberValue();
+     if (options->Has(Nan::New<String>("endAngle").ToLocalChecked())) {
      endAngle = options->Get(Nan::New<String>("endAngle").ToLocalChecked())->NumberValue();
-     if (options->Has(NanNew<String>("lineType"))) {
      lineType = options->Get(NanNew<String>("lineType"))->Uint32Value();
+     if (options->Has(Nan::New<String>("lineType").ToLocalChecked())) {
      lineType = options->Get(Nan::New<String>("lineType").ToLocalChecked())->Uint32Value();
-     if (options->Has(NanNew<String>("shift"))) {
      shift = options->Get(NanNew<String>("shift"))->Uint32Value();
+     if (options->Has(Nan::New<String>("shift").ToLocalChecked())) {
      shift = options->Get(Nan::New<String>("shift").ToLocalChecked())->Uint32Value();
-     if (options->Has(NanNew<String>("color"))) {
+     if (options->Has(Nan::New<String>("color").ToLocalChecked())) {
-           options->Get(NanNew<String>("color"))->ToObject();
+           options->Get(Nan::New<String>("color").ToLocalChecked())->ToObject();
-     x = args[0]->Uint32Value();
    y = args[1]->Uint32Value();
    width = args[2]->Uint32Value();
    height = args[3]->Uint32Value();
+     x = info[0]->Uint32Value();
    y = info[1]->Uint32Value();
    width = info[2]->Uint32Value();
    height = info[3]->Uint32Value();
-     if (args[4]->IsArray()) {
      Local < Object > objColor = args[4]->ToObject();
+     if (info[4]->IsArray()) {
      Local < Object > objColor = info[4]->ToObject();
-     if (args[5]->IntegerValue())
      thickness = args[5]->IntegerValue();
+     if (info[5]->IntegerValue())
      thickness = info[5]->IntegerValue();
-   NanReturnNull();
+   info.GetReturnValue().Set(Nan::Null());
-   if (args[0]->IsArray() && args[1]->IsArray()) {
    Local < Object > xy = args[0]->ToObject();
    Local < Object > width_height = args[1]->ToObject();
+   if (info[0]->IsArray() && info[1]->IsArray()) {
    Local < Object > xy = info[0]->ToObject();
    Local < Object > width_height = info[1]->ToObject();
-     if (args[2]->IsArray()) {
      Local < Object > objColor = args[2]->ToObject();
+     if (info[2]->IsArray()) {
      Local < Object > objColor = info[2]->ToObject();
-     if (args[3]->IntegerValue())
      thickness = args[3]->IntegerValue();
+     if (info[3]->IntegerValue())
      thickness = info[3]->IntegerValue();
-   NanReturnNull();
+   info.GetReturnValue().Set(Nan::Null());
-   if (args[0]->IsArray() && args[1]->IsArray()) {
    Local < Object > xy1 = args[0]->ToObject();
    Local < Object > xy2 = args[1]->ToObject();
+   if (info[0]->IsArray() && info[1]->IsArray()) {
    Local < Object > xy1 = info[0]->ToObject();
    Local < Object > xy2 = info[1]->ToObject();
-     if (args[2]->IsArray()) {
      Local < Object > objColor = args[2]->ToObject();
+     if (info[2]->IsArray()) {
      Local < Object > objColor = info[2]->ToObject();
-     if (args[3]->IntegerValue())
      thickness = args[3]->IntegerValue();
+     if (info[3]->IntegerValue())
      thickness = info[3]->IntegerValue();
-   NanReturnNull();
+   info.GetReturnValue().Set(Nan::Null());
-   if (args[0]->IsArray()) {
    Local < Array > polyArray = Local < Array > ::Cast(args[0]->ToObject());
+   if (info[0]->IsArray()) {
    Local < Array > polyArray = Local < Array > ::Cast(info[0]->ToObject());
-     if (args[1]->IsArray()) {
      Local<Object> objColor = args[1]->ToObject();
+     if (info[1]->IsArray()) {
      Local<Object> objColor = info[1]->ToObject();
-   NanReturnNull();
+   info.GetReturnValue().Set(Nan::Null());
-   if (args.Length() > 1) {
    return SaveAsync(args);
+   if (info.Length() > 1) {
    return SaveAsync(info);
-   if (!args[0]->IsString()) {
    NanThrowTypeError("filename required");
+   if (!info[0]->IsString()) {
    Nan::ThrowTypeError("filename required");
-   NanAsciiString filename(args[0]);
+   Nan::Utf8String filename(info[0]);
-   NanReturnValue(NanNew<Number>(res));
+   info.GetReturnValue().Set(Nan::New<Number>(res));
- class AsyncSaveWorker: public NanAsyncWorker {
+ class AsyncSaveWorker: public Nan::AsyncWorker {
-   AsyncSaveWorker(NanCallback *callback, Matrix* matrix, char* filename) :
      NanAsyncWorker(callback),
+   AsyncSaveWorker(Nan::Callback *callback, Matrix* matrix, char* filename) :
      Nan::AsyncWorker(callback),
-     NanScope();
+     Nan::HandleScope scope;
-       NanNull(),
      NanNew<Number>(res)
+       Nan::Null(),
      Nan::New<Number>(res)
-   if (!args[0]->IsString()) {
    NanThrowTypeError("filename required");
+   if (!info[0]->IsString()) {
    Nan::ThrowTypeError("filename required");
-   NanAsciiString filename(args[0]);
+   Nan::Utf8String filename(info[0]);
-   NanCallback *callback = new NanCallback(cb.As<Function>());
  NanAsyncQueueWorker(new AsyncSaveWorker(callback, self, *filename));
+   Nan::Callback *callback = new Nan::Callback(cb.As<Function>());
  Nan::AsyncQueueWorker(new AsyncSaveWorker(callback, self, *filename));
-   NanReturnUndefined();
+   return;
-   NanScope();
+   Nan::HandleScope scope;
-   int w = args[0]->Uint32Value();
  int h = args[1]->Uint32Value();
  int type = (args.Length() > 2) ? args[2]->IntegerValue() : CV_64FC1;
+   int w = info[0]->Uint32Value();
  int h = info[1]->Uint32Value();
  int type = (info.Length() > 2) ? info[2]->IntegerValue() : CV_64FC1;
-   Local<Object> im_h = NanNew(Matrix::constructor)->GetFunction()->NewInstance();
  Matrix *img = ObjectWrap::Unwrap<Matrix>(im_h);
+   Local<Object> im_h = Nan::New(Matrix::constructor)->GetFunction()->NewInstance();
  Matrix *img = Nan::ObjectWrap::Unwrap<Matrix>(im_h);
-   NanReturnValue(im_h);
+   info.GetReturnValue().Set(im_h);
-   NanScope();
+   Nan::HandleScope scope;
-   int w = args[0]->Uint32Value();
  int h = args[1]->Uint32Value();
  int type = (args.Length() > 2) ? args[2]->IntegerValue() : CV_64FC1;
+   int w = info[0]->Uint32Value();
  int h = info[1]->Uint32Value();
  int type = (info.Length() > 2) ? info[2]->IntegerValue() : CV_64FC1;
-   Local<Object> im_h = NanNew(Matrix::constructor)->GetFunction()->NewInstance();
  Matrix *img = ObjectWrap::Unwrap<Matrix>(im_h);
+   Local<Object> im_h = Nan::New(Matrix::constructor)->GetFunction()->NewInstance();
  Matrix *img = Nan::ObjectWrap::Unwrap<Matrix>(im_h);
-   NanReturnValue(im_h);
+   info.GetReturnValue().Set(im_h);
-   NanScope();
+   Nan::HandleScope scope;
-   int w = args[0]->Uint32Value();
  int h = args[1]->Uint32Value();
  int type = (args.Length() > 2) ? args[2]->IntegerValue() : CV_64FC1;
+   int w = info[0]->Uint32Value();
  int h = info[1]->Uint32Value();
  int type = (info.Length() > 2) ? info[2]->IntegerValue() : CV_64FC1;
-   Local<Object> im_h = NanNew(Matrix::constructor)->GetFunction()->NewInstance();
  Matrix *img = ObjectWrap::Unwrap<Matrix>(im_h);
+   Local<Object> im_h = Nan::New(Matrix::constructor)->GetFunction()->NewInstance();
  Matrix *img = Nan::ObjectWrap::Unwrap<Matrix>(im_h);
-   NanReturnValue(im_h);
+   info.GetReturnValue().Set(im_h);
-   NanScope();
+   Nan::HandleScope scope;
-   Matrix *self = ObjectWrap::Unwrap<Matrix>(args.This());
+   Matrix *self = Nan::ObjectWrap::Unwrap<Matrix>(info.This());
-     NanThrowError("Image is no 3-channel");
+     Nan::ThrowError("Image is no 3-channel");
-   NanReturnNull();
+   info.GetReturnValue().Set(Nan::Null());
-   NanScope();
+   Nan::HandleScope scope;
-   Matrix *self = ObjectWrap::Unwrap<Matrix>(args.This());
+   Matrix *self = Nan::ObjectWrap::Unwrap<Matrix>(info.This());
-     NanThrowError("Image is no 3-channel");
+     Nan::ThrowError("Image is no 3-channel");
-   NanReturnNull();
+   info.GetReturnValue().Set(Nan::Null());
-   NanScope();
+   Nan::HandleScope scope;
-   Matrix *self = ObjectWrap::Unwrap<Matrix>(args.This());
+   Matrix *self = Nan::ObjectWrap::Unwrap<Matrix>(info.This());
-   if (args.Length() < 1) {
+   if (info.Length() < 1) {
-     if (!args[0]->IsArray()) {
      NanThrowTypeError("'ksize' argument must be a 2 double array");
+     if (!info[0]->IsArray()) {
      Nan::ThrowTypeError("'ksize' argument must be a 2 double array");
-     Local<Object> array = args[0]->ToObject();
+     Local<Object> array = info[0]->ToObject();
-       NanThrowTypeError("'ksize' argument must be a 2 double array");
+       Nan::ThrowTypeError("'ksize' argument must be a 2 double array");
-   NanReturnNull();
+   info.GetReturnValue().Set(Nan::Null());
-   NanScope();
+   Nan::HandleScope scope;
-   Matrix *self = ObjectWrap::Unwrap<Matrix>(args.This());
+   Matrix *self = Nan::ObjectWrap::Unwrap<Matrix>(info.This());
-   if (args[0]->IsNumber()) {
    ksize = args[0]->IntegerValue();
+   if (info[0]->IsNumber()) {
    ksize = info[0]->IntegerValue();
-       NanThrowTypeError("'ksize' argument must be a positive odd integer");
+       Nan::ThrowTypeError("'ksize' argument must be a positive odd integer");
-     NanThrowTypeError("'ksize' argument must be a positive odd integer");
+     Nan::ThrowTypeError("'ksize' argument must be a positive odd integer");
-   NanReturnNull();
+   info.GetReturnValue().Set(Nan::Null());
-   NanScope();
+   Nan::HandleScope scope;
-   Matrix *self = ObjectWrap::Unwrap<Matrix>(args.This());
+   Matrix *self = Nan::ObjectWrap::Unwrap<Matrix>(info.This());
-   if (args.Length() != 0) {
    if (args.Length() < 3 || args.Length() > 4) {
      NanThrowTypeError("BilateralFilter takes 0, 3, or 4 arguments");
+   if (info.Length() != 0) {
    if (info.Length() < 3 || info.Length() > 4) {
      Nan::ThrowTypeError("BilateralFilter takes 0, 3, or 4 arguments");
-       d = args[0]->IntegerValue();
      sigmaColor = args[1]->NumberValue();
      sigmaSpace = args[2]->NumberValue();
      if (args.Length() == 4) {
        borderType = args[3]->IntegerValue();
+       d = info[0]->IntegerValue();
      sigmaColor = info[1]->NumberValue();
      sigmaSpace = info[2]->NumberValue();
      if (info.Length() == 4) {
        borderType = info[3]->IntegerValue();
-   NanReturnNull();
+   info.GetReturnValue().Set(Nan::Null());
-   NanScope();
+   Nan::HandleScope scope;
-   Matrix *self = ObjectWrap::Unwrap<Matrix>(args.This());
+   Matrix *self = Nan::ObjectWrap::Unwrap<Matrix>(info.This());
-       NanNew(Matrix::constructor)->GetFunction()->NewInstance();
  Matrix *img = ObjectWrap::Unwrap<Matrix>(img_to_return);
+       Nan::New(Matrix::constructor)->GetFunction()->NewInstance();
  Matrix *img = Nan::ObjectWrap::Unwrap<Matrix>(img_to_return);
-   NanReturnValue(img_to_return);
+   info.GetReturnValue().Set(img_to_return);
-   NanScope();
+   Nan::HandleScope scope;
-   Matrix *self = ObjectWrap::Unwrap<Matrix>(args.This());
+   Matrix *self = Nan::ObjectWrap::Unwrap<Matrix>(info.This());
-   if ( args.Length() < 1 || !args[0]->IsInt32() ) {
    NanThrowTypeError("Flip requires an integer flipCode argument "
+   if ( info.Length() < 1 || !info[0]->IsInt32() ) {
    Nan::ThrowTypeError("Flip requires an integer flipCode argument "
-   int flipCode = args[0]->ToInt32()->Value();
+   int flipCode = info[0]->ToInt32()->Value();
-   Local<Object> img_to_return = NanNew(Matrix::constructor)->GetFunction()->NewInstance();
  Matrix *img = ObjectWrap::Unwrap<Matrix>(img_to_return);
+   Local<Object> img_to_return = Nan::New(Matrix::constructor)->GetFunction()->NewInstance();
  Matrix *img = Nan::ObjectWrap::Unwrap<Matrix>(img_to_return);
-   NanReturnValue(img_to_return);
+   info.GetReturnValue().Set(img_to_return);
-   NanScope();
+   Nan::HandleScope scope;
-   Matrix *self = ObjectWrap::Unwrap<Matrix>(args.This());
+   Matrix *self = Nan::ObjectWrap::Unwrap<Matrix>(info.This());
-   if ( args.Length() != 4 ) {
    NanThrowTypeError("ROI requires x,y,w,h arguments");
+   if ( info.Length() != 4 ) {
    Nan::ThrowTypeError("ROI requires x,y,w,h arguments");
-   Local<Object> img_to_return = NanNew(Matrix::constructor)->GetFunction()->NewInstance();
  Matrix *img = ObjectWrap::Unwrap<Matrix>(img_to_return);
+   Local<Object> img_to_return = Nan::New(Matrix::constructor)->GetFunction()->NewInstance();
  Matrix *img = Nan::ObjectWrap::Unwrap<Matrix>(img_to_return);
-   int x = args[0]->IntegerValue();
  int y = args[1]->IntegerValue();
  int w = args[2]->IntegerValue();
  int h = args[3]->IntegerValue();
+   int x = info[0]->IntegerValue();
  int y = info[1]->IntegerValue();
  int w = info[2]->IntegerValue();
  int h = info[3]->IntegerValue();
-   NanReturnValue(img_to_return);
+   info.GetReturnValue().Set(img_to_return);
-   NanScope();
  Matrix *self = ObjectWrap::Unwrap<Matrix>(args.This());
  int line = args[0]->Uint32Value();
+   Nan::HandleScope scope;
  Matrix *self = Nan::ObjectWrap::Unwrap<Matrix>(info.This());
  int line = info[0]->Uint32Value();
-   Local<Object> return_buffer = NanNewBufferHandle((char*)data, self->mat.step);
  NanReturnValue( return_buffer );
//  NanReturnUndefined();
+   Local<Object> return_buffer = Nan::NewBuffer((char*)data, self->mat.step).ToLocalChecked();
  info.GetReturnValue().Set( return_buffer );
//  return;
-   NanScope();
+   Nan::HandleScope scope;
-   Matrix *self = ObjectWrap::Unwrap<Matrix>(args.This());
  Matrix *src1 = ObjectWrap::Unwrap<Matrix>(args[0]->ToObject());
  Matrix *src2 = ObjectWrap::Unwrap<Matrix>(args[1]->ToObject());
+   Matrix *self = Nan::ObjectWrap::Unwrap<Matrix>(info.This());
  Matrix *src1 = Nan::ObjectWrap::Unwrap<Matrix>(info[0]->ToObject());
  Matrix *src2 = Nan::ObjectWrap::Unwrap<Matrix>(info[1]->ToObject());
-   NanReturnNull();
+   info.GetReturnValue().Set(Nan::Null());
-   NanScope();
+   Nan::HandleScope scope;
-   Matrix *self = ObjectWrap::Unwrap<Matrix>(args.This());
  Matrix *src1 = ObjectWrap::Unwrap<Matrix>(args[0]->ToObject());
  Matrix *src2 = ObjectWrap::Unwrap<Matrix>(args[2]->ToObject());
+   Matrix *self = Nan::ObjectWrap::Unwrap<Matrix>(info.This());
  Matrix *src1 = Nan::ObjectWrap::Unwrap<Matrix>(info[0]->ToObject());
  Matrix *src2 = Nan::ObjectWrap::Unwrap<Matrix>(info[2]->ToObject());
-   float alpha = args[1]->NumberValue();
  float beta = args[3]->NumberValue();
+   float alpha = info[1]->NumberValue();
  float beta = info[3]->NumberValue();
-     NanThrowError(err_msg);
+     Nan::ThrowError(err_msg);
-   NanReturnNull();
+   info.GetReturnValue().Set(Nan::Null());
-   NanScope();
+   Nan::HandleScope scope;
-   Matrix *self = ObjectWrap::Unwrap<Matrix>(args.This());
  Matrix *src1 = ObjectWrap::Unwrap<Matrix>(args[0]->ToObject());
  Matrix *src2 = ObjectWrap::Unwrap<Matrix>(args[1]->ToObject());
+   Matrix *self = Nan::ObjectWrap::Unwrap<Matrix>(info.This());
  Matrix *src1 = Nan::ObjectWrap::Unwrap<Matrix>(info[0]->ToObject());
  Matrix *src2 = Nan::ObjectWrap::Unwrap<Matrix>(info[1]->ToObject());
-   if (args.Length() == 3) {
    Matrix *mask = ObjectWrap::Unwrap<Matrix>(args[2]->ToObject());
+   if (info.Length() == 3) {
    Matrix *mask = Nan::ObjectWrap::Unwrap<Matrix>(info[2]->ToObject());
-   NanReturnNull();
+   info.GetReturnValue().Set(Nan::Null());
-   NanScope();
+   Nan::HandleScope scope;
-   Matrix *self = ObjectWrap::Unwrap<Matrix>(args.This());
  Matrix *dst = ObjectWrap::Unwrap<Matrix>(args[0]->ToObject());
  if (args.Length() == 2) {
    Matrix *mask = ObjectWrap::Unwrap<Matrix>(args[1]->ToObject());
+   Matrix *self = Nan::ObjectWrap::Unwrap<Matrix>(info.This());
  Matrix *dst = Nan::ObjectWrap::Unwrap<Matrix>(info[0]->ToObject());
  if (info.Length() == 2) {
    Matrix *mask = Nan::ObjectWrap::Unwrap<Matrix>(info[1]->ToObject());
-   NanReturnNull();
+   info.GetReturnValue().Set(Nan::Null());
-   NanScope();
+   Nan::HandleScope scope;
-   Matrix *self = ObjectWrap::Unwrap<Matrix>(args.This());
  Matrix *src1 = ObjectWrap::Unwrap<Matrix>(args[0]->ToObject());
  Matrix *src2 = ObjectWrap::Unwrap<Matrix>(args[1]->ToObject());
  if (args.Length() == 3) {
    Matrix *mask = ObjectWrap::Unwrap<Matrix>(args[2]->ToObject());
+   Matrix *self = Nan::ObjectWrap::Unwrap<Matrix>(info.This());
  Matrix *src1 = Nan::ObjectWrap::Unwrap<Matrix>(info[0]->ToObject());
  Matrix *src2 = Nan::ObjectWrap::Unwrap<Matrix>(info[1]->ToObject());
  if (info.Length() == 3) {
    Matrix *mask = Nan::ObjectWrap::Unwrap<Matrix>(info[2]->ToObject());
-   NanReturnNull();
+   info.GetReturnValue().Set(Nan::Null());
-   NanScope();
+   Nan::HandleScope scope;
-   Matrix *self = ObjectWrap::Unwrap<Matrix>(args.This());
+   Matrix *self = Nan::ObjectWrap::Unwrap<Matrix>(info.This());
-   NanReturnValue(NanNew<Number>(count));
+   info.GetReturnValue().Set(Nan::New<Number>(count));
-   NanScope();
+   Nan::HandleScope scope;
-   //Matrix *self = ObjectWrap::Unwrap<Matrix>(args.This());
+   //Matrix *self = Nan::ObjectWrap::Unwrap<Matrix>(info.This());
-   NanReturnNull();
+   info.GetReturnValue().Set(Nan::Null());
-   NanScope();
+   Nan::HandleScope scope;
-   Matrix *self = ObjectWrap::Unwrap<Matrix>(args.This());
  int lowThresh = args[0]->NumberValue();
  int highThresh = args[1]->NumberValue();
+   Matrix *self = Nan::ObjectWrap::Unwrap<Matrix>(info.This());
  int lowThresh = info[0]->NumberValue();
  int highThresh = info[1]->NumberValue();
-   NanReturnNull();
+   info.GetReturnValue().Set(Nan::Null());
-   NanScope();
+   Nan::HandleScope scope;
-   Matrix *self = ObjectWrap::Unwrap<Matrix>(args.This());
  int niters = args[0]->NumberValue();
+   Matrix *self = Nan::ObjectWrap::Unwrap<Matrix>(info.This());
  int niters = info[0]->NumberValue();
-   NanReturnNull();
+   info.GetReturnValue().Set(Nan::Null());
-   NanScope();
+   Nan::HandleScope scope;
-   Matrix *self = ObjectWrap::Unwrap<Matrix>(args.This());
  int niters = args[0]->NumberValue();
+   Matrix *self = Nan::ObjectWrap::Unwrap<Matrix>(info.This());
  int niters = info[0]->NumberValue();
-   NanReturnNull();
+   info.GetReturnValue().Set(Nan::Null());
-   NanScope();
+   Nan::HandleScope scope;
-   if (args.Length() > 0) {
    if (args[0]->IsNumber()) mode = args[0]->IntegerValue();
+   if (info.Length() > 0) {
    if (info[0]->IsNumber()) mode = info[0]->IntegerValue();
-   if (args.Length() > 1) {
    if (args[1]->IsNumber()) chain = args[1]->IntegerValue();
+   if (info.Length() > 1) {
    if (info[1]->IsNumber()) chain = info[1]->IntegerValue();
-   Matrix *self = ObjectWrap::Unwrap<Matrix>(args.This());
  Local<Object> conts_to_return= NanNew(Contour::constructor)->GetFunction()->NewInstance();
  Contour *contours = ObjectWrap::Unwrap<Contour>(conts_to_return);
+   Matrix *self = Nan::ObjectWrap::Unwrap<Matrix>(info.This());
  Local<Object> conts_to_return= Nan::New(Contour::constructor)->GetFunction()->NewInstance();
  Contour *contours = Nan::ObjectWrap::Unwrap<Contour>(conts_to_return);
-   NanReturnValue(conts_to_return);
+   info.GetReturnValue().Set(conts_to_return);
-   NanScope();
+   Nan::HandleScope scope;
-   Matrix *self = ObjectWrap::Unwrap<Matrix>(args.This());
  Contour *cont = ObjectWrap::Unwrap<Contour>(args[0]->ToObject());
  int pos = args[1]->NumberValue();
+   Matrix *self = Nan::ObjectWrap::Unwrap<Matrix>(info.This());
  Contour *cont = Nan::ObjectWrap::Unwrap<Contour>(info[0]->ToObject());
  int pos = info[1]->NumberValue();
-   if (args[2]->IsArray()) {
    Local<Object> objColor = args[2]->ToObject();
+   if (info[2]->IsArray()) {
    Local<Object> objColor = info[2]->ToObject();
-   int thickness = args.Length() < 4 ? 1 : args[3]->NumberValue();
+   int thickness = info.Length() < 4 ? 1 : info[3]->NumberValue();
-   NanReturnUndefined();
+   return;
-   NanScope();
+   Nan::HandleScope scope;
-   Matrix *self = ObjectWrap::Unwrap<Matrix>(args.This());
  Contour *cont = ObjectWrap::Unwrap<Contour>(args[0]->ToObject());
+   Matrix *self = Nan::ObjectWrap::Unwrap<Matrix>(info.This());
  Contour *cont = Nan::ObjectWrap::Unwrap<Contour>(info[0]->ToObject());
-   if (args[1]->IsArray()) {
    Local<Object> objColor = args[1]->ToObject();
+   if (info[1]->IsArray()) {
    Local<Object> objColor = info[1]->ToObject();
-   int thickness = args.Length() < 3 ? 1 : args[2]->NumberValue();
+   int thickness = info.Length() < 3 ? 1 : info[2]->NumberValue();
-   NanReturnUndefined();
+   return;
-   NanScope();
+   Nan::HandleScope scope;
-   Matrix *self = ObjectWrap::Unwrap<Matrix>(args.This());
+   Matrix *self = Nan::ObjectWrap::Unwrap<Matrix>(info.This());
-   v8::Local<v8::Array> arr = NanNew<Array>(corners.size());
+   v8::Local<v8::Array> arr = Nan::New<Array>(corners.size());
-     v8::Local<v8::Array> pt = NanNew<Array>(2);
    pt->Set(0, NanNew<Number>((double) corners[i].x));
    pt->Set(1, NanNew<Number>((double) corners[i].y));
+     v8::Local<v8::Array> pt = Nan::New<Array>(2);
    pt->Set(0, Nan::New<Number>((double) corners[i].x));
    pt->Set(1, Nan::New<Number>((double) corners[i].y));
-   NanReturnValue(arr);
+   info.GetReturnValue().Set(arr);
-   NanScope();
+   Nan::HandleScope scope;
-   Matrix *self = ObjectWrap::Unwrap<Matrix>(args.This());
  double rho = args.Length() < 1 ? 1 : args[0]->NumberValue();
  double theta = args.Length() < 2 ? CV_PI/180 : args[1]->NumberValue();
  int threshold = args.Length() < 3 ? 80 : args[2]->Uint32Value();
  double minLineLength = args.Length() < 4 ? 30 : args[3]->NumberValue();
  double maxLineGap = args.Length() < 5 ? 10 : args[4]->NumberValue();
+   Matrix *self = Nan::ObjectWrap::Unwrap<Matrix>(info.This());
  double rho = info.Length() < 1 ? 1 : info[0]->NumberValue();
  double theta = info.Length() < 2 ? CV_PI/180 : info[1]->NumberValue();
  int threshold = info.Length() < 3 ? 80 : info[2]->Uint32Value();
  double minLineLength = info.Length() < 4 ? 30 : info[3]->NumberValue();
  double maxLineGap = info.Length() < 5 ? 10 : info[4]->NumberValue();
-   v8::Local<v8::Array> arr = NanNew<Array>(lines.size());
+   v8::Local<v8::Array> arr = Nan::New<Array>(lines.size());
-     v8::Local<v8::Array> pt = NanNew<Array>(4);
    pt->Set(0, NanNew<Number>((double) lines[i][0]));
    pt->Set(1, NanNew<Number>((double) lines[i][1]));
    pt->Set(2, NanNew<Number>((double) lines[i][2]));
    pt->Set(3, NanNew<Number>((double) lines[i][3]));
+     v8::Local<v8::Array> pt = Nan::New<Array>(4);
    pt->Set(0, Nan::New<Number>((double) lines[i][0]));
    pt->Set(1, Nan::New<Number>((double) lines[i][1]));
    pt->Set(2, Nan::New<Number>((double) lines[i][2]));
    pt->Set(3, Nan::New<Number>((double) lines[i][3]));
-   NanReturnValue(arr);
+   info.GetReturnValue().Set(arr);
-   NanScope();
+   Nan::HandleScope scope;
-   Matrix *self = ObjectWrap::Unwrap<Matrix>(args.This());
+   Matrix *self = Nan::ObjectWrap::Unwrap<Matrix>(info.This());
-   double dp = args.Length() < 1 ? 1 : args[0]->NumberValue();
  double minDist = args.Length() < 2 ? 1 : args[1]->NumberValue();
  double higherThreshold = args.Length() < 3 ? 100 : args[2]->NumberValue();
  double accumulatorThreshold = args.Length() < 4 ? 100 : args[3]->NumberValue();
  int minRadius = args.Length() < 5 ? 0 : args[4]->Uint32Value();
  int maxRadius = args.Length() < 6 ? 0 : args[5]->Uint32Value();
+   double dp = info.Length() < 1 ? 1 : info[0]->NumberValue();
  double minDist = info.Length() < 2 ? 1 : info[1]->NumberValue();
  double higherThreshold = info.Length() < 3 ? 100 : info[2]->NumberValue();
  double accumulatorThreshold = info.Length() < 4 ? 100 : info[3]->NumberValue();
  int minRadius = info.Length() < 5 ? 0 : info[4]->Uint32Value();
  int maxRadius = info.Length() < 6 ? 0 : info[5]->Uint32Value();
-   v8::Local<v8::Array> arr = NanNew<Array>(circles.size());
+   v8::Local<v8::Array> arr = Nan::New<Array>(circles.size());
-     v8::Local<v8::Array> pt = NanNew<Array>(3);
    pt->Set(0, NanNew<Number>((double) circles[i][0]));  // center x
    pt->Set(1, NanNew<Number>((double) circles[i][1]));// center y
    pt->Set(2, NanNew<Number>((double) circles[i][2]));// radius
+     v8::Local<v8::Array> pt = Nan::New<Array>(3);
    pt->Set(0, Nan::New<Number>((double) circles[i][0]));  // center x
    pt->Set(1, Nan::New<Number>((double) circles[i][1]));// center y
    pt->Set(2, Nan::New<Number>((double) circles[i][2]));// radius
-   NanReturnValue(arr);
+   info.GetReturnValue().Set(arr);
-   NanScope();
+   Nan::HandleScope scope;
-   int x = args[0]->Uint32Value();
  int y = args[1]->Uint32Value();
+   int x = info[0]->Uint32Value();
  int y = info[1]->Uint32Value();
-   int interpolation = (args.Length() < 3) ? (int)cv::INTER_LINEAR : args[2]->Uint32Value();
+   int interpolation = (info.Length() < 3) ? (int)cv::INTER_LINEAR : info[2]->Uint32Value();
-   Matrix *self = ObjectWrap::Unwrap<Matrix>(args.This());
+   Matrix *self = Nan::ObjectWrap::Unwrap<Matrix>(info.This());
-   NanReturnUndefined();
+   return;
-   NanScope();
+   Nan::HandleScope scope;
-   Matrix *self = ObjectWrap::Unwrap<Matrix>(args.This());
+   Matrix *self = Nan::ObjectWrap::Unwrap<Matrix>(info.This());
-   float angle = args[0]->ToNumber()->Value();
+   float angle = info[0]->ToNumber()->Value();
-       && (args.Length() == 1);
+       && (info.Length() == 1);
-     if (!angle2) {NanReturnUndefined();}
+     if (!angle2) {return;}
-     NanReturnUndefined();
+     return;
-   int x = args[1]->IsUndefined() ? round(self->mat.size().width / 2) :
      args[1]->Uint32Value();
  int y = args[1]->IsUndefined() ? round(self->mat.size().height / 2) :
      args[2]->Uint32Value();
+   int x = info[1]->IsUndefined() ? round(self->mat.size().width / 2) :
      info[1]->Uint32Value();
  int y = info[1]->IsUndefined() ? round(self->mat.size().height / 2) :
      info[2]->Uint32Value();
-   NanReturnUndefined();
+   return;
-   NanReturnUndefined();
+   return;
-   NanReturnUndefined();
+   return;
-   NanScope();
+   Nan::HandleScope scope;
-   Matrix *self = ObjectWrap::Unwrap<Matrix>(args.This());
+   Matrix *self = Nan::ObjectWrap::Unwrap<Matrix>(info.This());
-    NanThrowError(String::New("Image is no 3-channel"));*/
+    Nan::ThrowError(String::New("Image is no 3-channel"));*/
-   if (args[0]->IsArray() && args[1]->IsArray()) {
    Local<Object> args_lowerb = args[0]->ToObject();
    Local<Object> args_upperb = args[1]->ToObject();
+   if (info[0]->IsArray() && info[1]->IsArray()) {
    Local<Object> args_lowerb = info[0]->ToObject();
    Local<Object> args_upperb = info[1]->ToObject();
-   NanReturnNull();
+   info.GetReturnValue().Set(Nan::Null());
-   int dtop = args[0]->Uint32Value();
  int dbottom = args[1]->Uint32Value();
  int dleft = args[2]->Uint32Value();
  int dright = args[3]->Uint32Value();
+   int dtop = info[0]->Uint32Value();
  int dbottom = info[1]->Uint32Value();
  int dleft = info[2]->Uint32Value();
  int dright = info[3]->Uint32Value();
-   NanReturnNull();
+   info.GetReturnValue().Set(Nan::Null());
-   v8::Local < v8::Array > arr = NanNew<Array>(4);
  arr->Set(0, NanNew<Number>(wholeSize.width));
  arr->Set(1, NanNew<Number>(wholeSize.height));
  arr->Set(2, NanNew<Number>(ofs.x));
  arr->Set(3, NanNew<Number>(ofs.y));
+   v8::Local < v8::Array > arr = Nan::New<Array>(4);
  arr->Set(0, Nan::New<Number>(wholeSize.width));
  arr->Set(1, Nan::New<Number>(wholeSize.height));
  arr->Set(2, Nan::New<Number>(ofs.x));
  arr->Set(3, Nan::New<Number>(ofs.y));
-   NanReturnValue(arr);
+   info.GetReturnValue().Set(arr);
-   double threshold = args[0]->NumberValue();
  double maxVal = args[1]->NumberValue();
+   double threshold = info[0]->NumberValue();
  double maxVal = info[1]->NumberValue();
-   if (args.Length() == 3) {
    //    typ = args[2]->IntegerValue();
    NanAsciiString typstr(args[2]);
+   if (info.Length() == 3) {
    //    typ = info[2]->IntegerValue();
    Nan::Utf8String typstr(info[2]);
-       NanNew(Matrix::constructor)->GetFunction()->NewInstance();
  Matrix *img = ObjectWrap::Unwrap<Matrix>(img_to_return);
+       Nan::New(Matrix::constructor)->GetFunction()->NewInstance();
  Matrix *img = Nan::ObjectWrap::Unwrap<Matrix>(img_to_return);
-   NanReturnValue(img_to_return);
+   info.GetReturnValue().Set(img_to_return);
-   double maxVal = args[0]->NumberValue();
  double adaptiveMethod = args[1]->NumberValue();
  double thresholdType = args[2]->NumberValue();
  double blockSize = args[3]->NumberValue();
  double C = args[4]->NumberValue();
+   double maxVal = info[0]->NumberValue();
  double adaptiveMethod = info[1]->NumberValue();
  double thresholdType = info[2]->NumberValue();
  double blockSize = info[3]->NumberValue();
  double C = info[4]->NumberValue();
-       NanNew(Matrix::constructor)->GetFunction()->NewInstance();
  Matrix *img = ObjectWrap::Unwrap<Matrix>(img_to_return);
+       Nan::New(Matrix::constructor)->GetFunction()->NewInstance();
  Matrix *img = Nan::ObjectWrap::Unwrap<Matrix>(img_to_return);
-   NanReturnValue(img_to_return);
+   info.GetReturnValue().Set(img_to_return);
-   NanScope();
+   Nan::HandleScope scope;
-   Matrix *self = ObjectWrap::Unwrap<Matrix>(args.This());
+   Matrix *self = Nan::ObjectWrap::Unwrap<Matrix>(info.This());
-   Local<Object> mean = NanNew(Matrix::constructor)->GetFunction()->NewInstance();
  Matrix *m_mean = ObjectWrap::Unwrap<Matrix>(mean);
  Local<Object> stddev = NanNew(Matrix::constructor)->GetFunction()->NewInstance();
  Matrix *m_stddev = ObjectWrap::Unwrap<Matrix>(stddev);
+   Local<Object> mean = Nan::New(Matrix::constructor)->GetFunction()->NewInstance();
  Matrix *m_mean = Nan::ObjectWrap::Unwrap<Matrix>(mean);
  Local<Object> stddev = Nan::New(Matrix::constructor)->GetFunction()->NewInstance();
  Matrix *m_stddev = Nan::ObjectWrap::Unwrap<Matrix>(stddev);
-   Local<Object> data = NanNew<Object>();
  data->Set(NanNew<String>("mean"), mean);
  data->Set(NanNew<String>("stddev"), stddev);
+   Local<Object> data = Nan::New<Object>();
  data->Set(Nan::New<String>("mean").ToLocalChecked(), mean);
  data->Set(Nan::New<String>("stddev").ToLocalChecked(), stddev);
-   NanReturnValue(data);
+   info.GetReturnValue().Set(data);
-   NanScope();
+   Nan::HandleScope scope;
-   Matrix * self = ObjectWrap::Unwrap<Matrix>(args.This());
+   Matrix * self = Nan::ObjectWrap::Unwrap<Matrix>(info.This());
-   Matrix *dest = ObjectWrap::Unwrap<Matrix>(args[0]->ToObject());
+   Matrix *dest = Nan::ObjectWrap::Unwrap<Matrix>(info[0]->ToObject());
-   int x = args[1]->IntegerValue();
+   int x = info[1]->IntegerValue();
-   int y = args[2]->IntegerValue();
+   int y = info[2]->IntegerValue();
-   NanReturnUndefined();
+   return;
-   NanScope();
+   Nan::HandleScope scope;
-   Matrix * self = ObjectWrap::Unwrap<Matrix>(args.This());
+   Matrix * self = Nan::ObjectWrap::Unwrap<Matrix>(info.This());
-   v8::String::Utf8Value str (args[0]->ToString());
+   v8::String::Utf8Value str (info[0]->ToString());
-     NanThrowTypeError("Conversion code is unsupported");
+     Nan::ThrowTypeError("Conversion code is unsupported");
-   NanReturnUndefined();
+   return;
-   NanScope();
+   Nan::HandleScope scope;
-   Matrix * self = ObjectWrap::Unwrap<Matrix>(args.This());
+   Matrix * self = Nan::ObjectWrap::Unwrap<Matrix>(info.This());
-   v8::Local<v8::Array> arrChannels = NanNew<Array>(size);
+   v8::Local<v8::Array> arrChannels = Nan::New<Array>(size);
-         NanNew(Matrix::constructor)->GetFunction()->NewInstance();
    Matrix * m = ObjectWrap::Unwrap<Matrix>(matObject);
+         Nan::New(Matrix::constructor)->GetFunction()->NewInstance();
    Matrix * m = Nan::ObjectWrap::Unwrap<Matrix>(matObject);
-   NanReturnValue(arrChannels);
+   info.GetReturnValue().Set(arrChannels);
-   NanScope();
+   Nan::HandleScope scope;
-   Matrix * self = ObjectWrap::Unwrap<Matrix>(args.This());
  if (!args[0]->IsArray()) {
    NanThrowTypeError("The argument must be an array");
+   Matrix * self = Nan::ObjectWrap::Unwrap<Matrix>(info.This());
  if (!info[0]->IsArray()) {
    Nan::ThrowTypeError("The argument must be an array");
-   v8::Handle<v8::Array> jsChannels = v8::Handle<v8::Array>::Cast(args[0]);
+   v8::Handle<v8::Array> jsChannels = v8::Handle<v8::Array>::Cast(info[0]);
-     Matrix * matObject = ObjectWrap::Unwrap<Matrix>(jsChannels->Get(i)->ToObject());
+     Matrix * matObject = Nan::ObjectWrap::Unwrap<Matrix>(jsChannels->Get(i)->ToObject());
-   NanReturnUndefined();
+   return;
-   NanScope();
  Matrix * self = ObjectWrap::Unwrap<Matrix>(args.This());
+   Nan::HandleScope scope;
  Matrix * self = Nan::ObjectWrap::Unwrap<Matrix>(info.This());
-   NanReturnUndefined();
+   return;
-   // obj->Get(NanNew<String>("x"))
+   // obj->Get(Nan::New<String>("x").ToLocalChecked())
-   if (args.Length() < 1 || !args[0]->IsObject()) {
+   if (info.Length() < 1 || !info[0]->IsObject()) {
-   Local < Object > obj = args[0]->ToObject();
+   Local < Object > obj = info[0]->ToObject();
-       setPoint(obj->Get(NanNew<String>("seedPoint"))->ToObject()),
      setColor(obj->Get(NanNew<String>("newColor"))->ToObject()),
      obj->Get(NanNew<String>("rect"))->IsUndefined() ?
          0 : setRect(obj->Get(NanNew<String>("rect"))->ToObject(), rect),
      setColor(obj->Get(NanNew<String>("loDiff"))->ToObject()),
      setColor(obj->Get(NanNew<String>("upDiff"))->ToObject()), 4);
+       setPoint(obj->Get(Nan::New<String>("seedPoint").ToLocalChecked())->ToObject()),
      setColor(obj->Get(Nan::New<String>("newColor").ToLocalChecked())->ToObject()),
      obj->Get(Nan::New<String>("rect").ToLocalChecked())->IsUndefined() ?
          0 : setRect(obj->Get(Nan::New<String>("rect").ToLocalChecked())->ToObject(), rect),
      setColor(obj->Get(Nan::New<String>("loDiff").ToLocalChecked())->ToObject()),
      setColor(obj->Get(Nan::New<String>("upDiff").ToLocalChecked())->ToObject()), 4);
-   NanReturnValue(NanNew<Number>(ret));
+   info.GetReturnValue().Set(Nan::New<Number>(ret));
-       (args.Length() >= 1) ? args[0]->IsNumber() : false;
+       (info.Length() >= 1) ? info[0]->IsNumber() : false;
-       (args.Length() >= 2) ? args[1]->IsNumber() : false;
  double min_probability = filter_min_probability ? args[0]->NumberValue() : 0;
  double max_probability = filter_max_probability ? args[1]->NumberValue() : 0;
  int limit = (args.Length() >= 3) ? args[2]->IntegerValue() : 0;
  bool ascending = (args.Length() >= 4) ? args[3]->BooleanValue() : false;
  int min_x_distance = (args.Length() >= 5) ? args[4]->IntegerValue() : 0;
  int min_y_distance = (args.Length() >= 6) ? args[5]->IntegerValue() : 0;
+       (info.Length() >= 2) ? info[1]->IsNumber() : false;
  double min_probability = filter_min_probability ? info[0]->NumberValue() : 0;
  double max_probability = filter_max_probability ? info[1]->NumberValue() : 0;
  int limit = (info.Length() >= 3) ? info[2]->IntegerValue() : 0;
  bool ascending = (info.Length() >= 4) ? info[3]->BooleanValue() : false;
  int min_x_distance = (info.Length() >= 5) ? info[4]->IntegerValue() : 0;
  int min_y_distance = (info.Length() >= 6) ? info[5]->IntegerValue() : 0;
-   v8::Local < v8::Array > probabilites_array = NanNew<v8::Array>(limit);
+   v8::Local < v8::Array > probabilites_array = Nan::New<v8::Array>(limit);
-     Local<Value> x_value = NanNew<Number>(pt.x);
    Local<Value> y_value = NanNew<Number>(pt.y);
    Local<Value> probability_value = NanNew<Number>(probability);
+     Local<Value> x_value = Nan::New<Number>(pt.x);
    Local<Value> y_value = Nan::New<Number>(pt.y);
    Local<Value> probability_value = Nan::New<Number>(probability);
-     Local < Object > probability_object = NanNew<Object>();
    probability_object->Set(NanNew<String>("x"), x_value);
    probability_object->Set(NanNew<String>("y"), y_value);
    probability_object->Set(NanNew<String>("probability"), probability_value);
+     Local < Object > probability_object = Nan::New<Object>();
    probability_object->Set(Nan::New<String>("x").ToLocalChecked(), x_value);
    probability_object->Set(Nan::New<String>("y").ToLocalChecked(), y_value);
    probability_object->Set(Nan::New<String>("probability").ToLocalChecked(), probability_value);
-   NanReturnValue(probabilites_array);
+   info.GetReturnValue().Set(probabilites_array);
-   NanScope();
+   Nan::HandleScope scope;
-   Matrix *self = ObjectWrap::Unwrap<Matrix>(args.This());
+   Matrix *self = Nan::ObjectWrap::Unwrap<Matrix>(info.This());
-   v8::String::Utf8Value args0(args[0]->ToString());
+   v8::String::Utf8Value args0(info[0]->ToString());
-   Local<Object> out = NanNew(Matrix::constructor)->GetFunction()->NewInstance();
  Matrix *m_out = ObjectWrap::Unwrap<Matrix>(out);
+   Local<Object> out = Nan::New(Matrix::constructor)->GetFunction()->NewInstance();
  Matrix *m_out = Nan::ObjectWrap::Unwrap<Matrix>(out);
-   int method = (args.Length() < 2) ? (int)cv::TM_CCORR_NORMED : args[1]->Uint32Value();
+   int method = (info.Length() < 2) ? (int)cv::TM_CCORR_NORMED : info[1]->Uint32Value();
-   NanReturnValue(out);
+   info.GetReturnValue().Set(out);
-   NanScope();
+   Nan::HandleScope scope;
-   Matrix *self = ObjectWrap::Unwrap<Matrix>(args.This());
+   Matrix *self = Nan::ObjectWrap::Unwrap<Matrix>(info.This());
-   Local<Value> v_minVal = NanNew<Number>(minVal);
  Local<Value> v_maxVal = NanNew<Number>(maxVal);
  Local<Value> v_minLoc_x = NanNew<Number>(minLoc.x);
  Local<Value> v_minLoc_y = NanNew<Number>(minLoc.y);
  Local<Value> v_maxLoc_x = NanNew<Number>(maxLoc.x);
  Local<Value> v_maxLoc_y = NanNew<Number>(maxLoc.y);
+   Local<Value> v_minVal = Nan::New<Number>(minVal);
  Local<Value> v_maxVal = Nan::New<Number>(maxVal);
  Local<Value> v_minLoc_x = Nan::New<Number>(minLoc.x);
  Local<Value> v_minLoc_y = Nan::New<Number>(minLoc.y);
  Local<Value> v_maxLoc_x = Nan::New<Number>(maxLoc.x);
  Local<Value> v_maxLoc_y = Nan::New<Number>(maxLoc.y);
-   Local<Object> o_minLoc = NanNew<Object>();
  o_minLoc->Set(NanNew<String>("x"), v_minLoc_x);
  o_minLoc->Set(NanNew<String>("y"), v_minLoc_y);
+   Local<Object> o_minLoc = Nan::New<Object>();
  o_minLoc->Set(Nan::New<String>("x").ToLocalChecked(), v_minLoc_x);
  o_minLoc->Set(Nan::New<String>("y").ToLocalChecked(), v_minLoc_y);
-   Local<Object> o_maxLoc = NanNew<Object>();
  o_maxLoc->Set(NanNew<String>("x"), v_maxLoc_x);
  o_maxLoc->Set(NanNew<String>("y"), v_maxLoc_y);
+   Local<Object> o_maxLoc = Nan::New<Object>();
  o_maxLoc->Set(Nan::New<String>("x").ToLocalChecked(), v_maxLoc_x);
  o_maxLoc->Set(Nan::New<String>("y").ToLocalChecked(), v_maxLoc_y);
-   Local<Object> result = NanNew<Object>();
  result->Set(NanNew<String>("minVal"), v_minVal);
  result->Set(NanNew<String>("maxVal"), v_maxVal);
  result->Set(NanNew<String>("minLoc"), o_minLoc);
  result->Set(NanNew<String>("maxLoc"), o_maxLoc);
+   Local<Object> result = Nan::New<Object>();
  result->Set(Nan::New<String>("minVal").ToLocalChecked(), v_minVal);
  result->Set(Nan::New<String>("maxVal").ToLocalChecked(), v_maxVal);
  result->Set(Nan::New<String>("minLoc").ToLocalChecked(), o_minLoc);
  result->Set(Nan::New<String>("maxLoc").ToLocalChecked(), o_maxLoc);
-   NanReturnValue(result);
+   info.GetReturnValue().Set(result);
-   NanScope();
+   Nan::HandleScope scope;
-   Matrix *self = ObjectWrap::Unwrap<Matrix>(args.This());
  Matrix *m_input = ObjectWrap::Unwrap<Matrix>(args[0]->ToObject());
+   Matrix *self = Nan::ObjectWrap::Unwrap<Matrix>(info.This());
  Matrix *m_input = Nan::ObjectWrap::Unwrap<Matrix>(info[0]->ToObject());
-   NanReturnValue(args.This());
+   info.GetReturnValue().Set(info.This());
-   NanScope();
+   Nan::HandleScope scope;
-   Matrix *self = ObjectWrap::Unwrap<Matrix>(args.This());
  NanAsciiString textString(args[0]);  //FIXME: might cause issues, see here https://github.com/rvagg/nan/pull/152
+   Matrix *self = Nan::ObjectWrap::Unwrap<Matrix>(info.This());
  Nan::Utf8String textString(info[0]);  //FIXME: might cause issues, see here https://github.com/rvagg/nan/pull/152
-   int x = args[1]->IntegerValue();
  int y = args[2]->IntegerValue();
+   int x = info[1]->IntegerValue();
  int y = info[2]->IntegerValue();
-   NanAsciiString fontString(args[3]);
+   Nan::Utf8String fontString(info[3]);
-   if (args[4]->IsArray()) {
    Local<Object> objColor = args[4]->ToObject();
+   if (info[4]->IsArray()) {
    Local<Object> objColor = info[4]->ToObject();
-   double scale = args.Length() < 6 ? 1 : args[5]->NumberValue();
  double thickness = args.Length() < 7 ? 1 : args[6]->NumberValue();
+   double scale = info.Length() < 6 ? 1 : info[5]->NumberValue();
  double thickness = info.Length() < 7 ? 1 : info[6]->NumberValue();
-   NanReturnUndefined();
+   return;
-   NanScope();
+   Nan::HandleScope scope;
-   // extract quad args
  Local<Object> srcArray = args[0]->ToObject();
  Local<Object> tgtArray = args[1]->ToObject();
+   // extract quad info
  Local<Object> srcArray = info[0]->ToObject();
  Local<Object> tgtArray = info[1]->ToObject();
-   Local<Object> xfrm = NanNew(Matrix::constructor)->GetFunction()->NewInstance();
  Matrix *xfrmmat = ObjectWrap::Unwrap<Matrix>(xfrm);
+   Local<Object> xfrm = Nan::New(Matrix::constructor)->GetFunction()->NewInstance();
  Matrix *xfrmmat = Nan::ObjectWrap::Unwrap<Matrix>(xfrm);
-   NanReturnValue(xfrm);
+   info.GetReturnValue().Set(xfrm);
-   Matrix *xfrm = ObjectWrap::Unwrap<Matrix>(args[0]->ToObject());
+   Matrix *xfrm = Nan::ObjectWrap::Unwrap<Matrix>(info[0]->ToObject());
-   int width = args[1]->IntegerValue();
  int height = args[2]->IntegerValue();
+   int width = info[1]->IntegerValue();
  int height = info[2]->IntegerValue();
-   if (args[3]->IsArray()) {
    Local < Object > objColor = args[3]->ToObject();
+   if (info[3]->IsArray()) {
    Local < Object > objColor = info[3]->ToObject();
-   NanReturnNull();
+   info.GetReturnValue().Set(Nan::Null());
-   Matrix *dest = ObjectWrap::Unwrap<Matrix>(args[0]->ToObject());
+   Matrix *dest = Nan::ObjectWrap::Unwrap<Matrix>(info[0]->ToObject());
-   Matrix *mask = ObjectWrap::Unwrap<Matrix>(args[1]->ToObject());
+   Matrix *mask = Nan::ObjectWrap::Unwrap<Matrix>(info[1]->ToObject());
-   NanReturnUndefined();
+   return;
-   Local < Object > valArray = args[0]->ToObject();
+   Local < Object > valArray = info[0]->ToObject();
-   Matrix *mask = ObjectWrap::Unwrap<Matrix>(args[1]->ToObject());
+   Matrix *mask = Nan::ObjectWrap::Unwrap<Matrix>(info[1]->ToObject());
-   NanReturnUndefined();
+   return;
-   Matrix *mask = ObjectWrap::Unwrap<Matrix>(args[0]->ToObject());
+   Matrix *mask = Nan::ObjectWrap::Unwrap<Matrix>(info[0]->ToObject());
-   v8::Local < v8::Array > arr = NanNew<Array>(3);
  arr->Set(0, NanNew<Number>(means[0]));
  arr->Set(1, NanNew<Number>(means[1]));
  arr->Set(2, NanNew<Number>(means[2]));
+   v8::Local < v8::Array > arr = Nan::New<Array>(3);
  arr->Set(0, Nan::New<Number>(means[0]));
  arr->Set(1, Nan::New<Number>(means[1]));
  arr->Set(2, Nan::New<Number>(means[2]));
-   NanReturnValue(arr);
+   info.GetReturnValue().Set(arr);
-   double tx = args[0]->NumberValue();
  double ty = args[1]->NumberValue();
+   double tx = info[0]->NumberValue();
  double ty = info[1]->NumberValue();
-   // get the integer values of args
+   // get the integer values of info
-   NanReturnUndefined();
+   return;
-   NanScope();
+   Nan::HandleScope scope;
-   Matrix *self = ObjectWrap::Unwrap<Matrix>(args.This());
+   Matrix *self = Nan::ObjectWrap::Unwrap<Matrix>(info.This());
-   NanReturnUndefined();
+   return;

Lines changed in src/Point.cc

- v8::Persistent<FunctionTemplate> Point::constructor;
+ Nan::Persistent<FunctionTemplate> Point::constructor;
-   NanScope();
+   Nan::HandleScope scope;
-   Local<FunctionTemplate> ctor = NanNew<FunctionTemplate>(Point::New);
  NanAssignPersistent(constructor, ctor);
+   Local<FunctionTemplate> ctor = Nan::New<FunctionTemplate>(Point::New);
  constructor.Reset(ctor);
-   ctor->SetClassName(NanNew("Point"));
+   ctor->SetClassName(Nan::New("Point").ToLocalChecked());
-   proto->SetAccessor(NanNew("x"), GetX, RaiseImmutable);
  proto->SetAccessor(NanNew("y"), GetY, RaiseImmutable);
+   Nan::SetAccessor(proto, Nan::New("x").ToLocalChecked(), GetX, RaiseImmutable);
  Nan::SetAccessor(proto, Nan::New("y").ToLocalChecked(), GetY, RaiseImmutable);
-   NODE_SET_PROTOTYPE_METHOD(ctor, "dot", Dot);
+   Nan::SetPrototypeMethod(ctor, "dot", Dot);
-   target->Set(NanNew("Point"), ctor->GetFunction());
+   target->Set(Nan::New("Point").ToLocalChecked(), ctor->GetFunction());
-   NanScope();
+   Nan::HandleScope scope;
-   if (args.This()->InternalFieldCount() == 0) {
    return NanThrowTypeError("Cannot Instantiate without new");
+   if (info.This()->InternalFieldCount() == 0) {
    return Nan::ThrowTypeError("Cannot Instantiate without new");
-   if (args[0]->IsNumber()) {
    x = args[0]->NumberValue();
+   if (info[0]->IsNumber()) {
    x = info[0]->NumberValue();
-   if (args[1]->IsNumber()) {
    y = args[1]->NumberValue();
+   if (info[1]->IsNumber()) {
    y = info[1]->NumberValue();
-   pt->Wrap(args.This());
  NanReturnValue(args.This());
+   pt->Wrap(info.This());
  info.GetReturnValue().Set(info.This());
-   NanScope();
  Point *pt = ObjectWrap::Unwrap<Point>(args.This());
  NanReturnValue(NanNew<Number>(pt->point.x));
+   Nan::HandleScope scope;
  Point *pt = Nan::ObjectWrap::Unwrap<Point>(info.This());
  info.GetReturnValue().Set(Nan::New<Number>(pt->point.x));
-   NanScope();
  Point *pt = ObjectWrap::Unwrap<Point>(args.This());
  NanReturnValue(NanNew<Number>(pt->point.y));
+   Nan::HandleScope scope;
  Point *pt = Nan::ObjectWrap::Unwrap<Point>(info.This());
  info.GetReturnValue().Set(Nan::New<Number>(pt->point.y));
-   NanThrowTypeError("Point is immutable");
+   Nan::ThrowTypeError("Point is immutable");
-   NanScope();
  Point *p1 = ObjectWrap::Unwrap<Point>(args.This());
  Point *p2 = ObjectWrap::Unwrap<Point>(args[0]->ToObject());
+   Nan::HandleScope scope;
  Point *p1 = Nan::ObjectWrap::Unwrap<Point>(info.This());
  Point *p2 = Nan::ObjectWrap::Unwrap<Point>(info[0]->ToObject());
-   NanReturnValue(NanNew<Number>(p1->point.x * p2->point.x + p1->point.y * p2->point.y));
+   info.GetReturnValue().Set(Nan::New<Number>(p1->point.x * p2->point.x + p1->point.y * p2->point.y));
-     ObjectWrap() {
+     Nan::ObjectWrap() {

Lines changed in src/Point.h

- class Point: public node::ObjectWrap {
+ class Point: public Nan::ObjectWrap {
-   static Persistent<FunctionTemplate> constructor;
+   static Nan::Persistent<FunctionTemplate> constructor;

Lines changed in src/Stereo.cc

- v8::Persistent<FunctionTemplate> StereoBM::constructor;
+ Nan::Persistent<FunctionTemplate> StereoBM::constructor;
-   NanScope();
+   Nan::HandleScope scope;
-   Local<FunctionTemplate> ctor = NanNew<FunctionTemplate>(StereoBM::New);
  NanAssignPersistent(constructor, ctor);
+   Local<FunctionTemplate> ctor = Nan::New<FunctionTemplate>(StereoBM::New);
  constructor.Reset(ctor);
-   ctor->SetClassName(NanNew("StereoBM"));
+   ctor->SetClassName(Nan::New("StereoBM").ToLocalChecked());
-   NODE_SET_PROTOTYPE_METHOD(ctor, "compute", Compute);
+   Nan::SetPrototypeMethod(ctor, "compute", Compute);
-   ctor->Set(NanNew<String>("BASIC_PRESET"), NanNew<Integer>((int)cv::StereoBM::BASIC_PRESET));
  ctor->Set(NanNew<String>("FISH_EYE_PRESET"), NanNew<Integer>((int)cv::StereoBM::FISH_EYE_PRESET));
  ctor->Set(NanNew<String>("NARROW_PRESET"), NanNew<Integer>((int)cv::StereoBM::NARROW_PRESET));
+   ctor->Set(Nan::New<String>("BASIC_PRESET").ToLocalChecked(), Nan::New<Integer>((int)cv::StereoBM::BASIC_PRESET));
  ctor->Set(Nan::New<String>("FISH_EYE_PRESET").ToLocalChecked(), Nan::New<Integer>((int)cv::StereoBM::FISH_EYE_PRESET));
  ctor->Set(Nan::New<String>("NARROW_PRESET").ToLocalChecked(), Nan::New<Integer>((int)cv::StereoBM::NARROW_PRESET));
-   target->Set(NanNew("StereoBM"), ctor->GetFunction());
+   target->Set(Nan::New("StereoBM").ToLocalChecked(), ctor->GetFunction());
-   NanScope();
+   Nan::HandleScope scope;
-   if (args.This()->InternalFieldCount() == 0) {
    NanThrowTypeError("Cannot instantiate without new");
+   if (info.This()->InternalFieldCount() == 0) {
    Nan::ThrowTypeError("Cannot instantiate without new");
-   if (args.Length() == 0) {
+   if (info.Length() == 0) {
-   } else if (args.Length() == 1) {
+   } else if (info.Length() == 1) {
-     stereo = new StereoBM(args[0]->IntegerValue());
  } else if (args.Length() == 2) {
+     stereo = new StereoBM(info[0]->IntegerValue());
  } else if (info.Length() == 2) {
-     stereo = new StereoBM(args[0]->IntegerValue(), args[1]->IntegerValue());
+     stereo = new StereoBM(info[0]->IntegerValue(), info[1]->IntegerValue());
-     stereo = new StereoBM(args[0]->IntegerValue(), args[1]->IntegerValue(),
+     stereo = new StereoBM(info[0]->IntegerValue(), info[1]->IntegerValue(),
-         args[2]->IntegerValue());
+         info[2]->IntegerValue());
-   stereo->Wrap(args.Holder());
  NanReturnValue(args.Holder());
+   stereo->Wrap(info.Holder());
  info.GetReturnValue().Set(info.Holder());
-     ObjectWrap(),
+     Nan::ObjectWrap(),
-     Matrix* m0 = ObjectWrap::Unwrap<Matrix>(args[0]->ToObject());
+     Matrix* m0 = Nan::ObjectWrap::Unwrap<Matrix>(info[0]->ToObject());
-     Matrix* m1 = ObjectWrap::Unwrap<Matrix>(args[1]->ToObject());
+     Matrix* m1 = Nan::ObjectWrap::Unwrap<Matrix>(info[1]->ToObject());
-     if (args.Length() > 2) {
      type = args[2]->IntegerValue();
+     if (info.Length() > 2) {
      type = info[2]->IntegerValue();
-         NanNew(Matrix::constructor)->GetFunction()->NewInstance();
    Matrix *disp = ObjectWrap::Unwrap<Matrix>(disparityWrap);
+         Nan::New(Matrix::constructor)->GetFunction()->NewInstance();
    Matrix *disp = Nan::ObjectWrap::Unwrap<Matrix>(disparityWrap);
-     NanReturnValue(disparityWrap);
+     info.GetReturnValue().Set(disparityWrap);
-     NanThrowError(err_msg);
    NanReturnUndefined();
+     Nan::ThrowError(err_msg);
    return;
- v8::Persistent<FunctionTemplate> StereoSGBM::constructor;
+ Nan::Persistent<FunctionTemplate> StereoSGBM::constructor;
-   NanScope();
+   Nan::HandleScope scope;
-   Local<FunctionTemplate> ctor = NanNew<FunctionTemplate>(StereoSGBM::New);
  NanAssignPersistent(constructor, ctor);
+   Local<FunctionTemplate> ctor = Nan::New<FunctionTemplate>(StereoSGBM::New);
  constructor.Reset(ctor);
-   ctor->SetClassName(NanNew("StereoSGBM"));
+   ctor->SetClassName(Nan::New("StereoSGBM").ToLocalChecked());
-   NODE_SET_PROTOTYPE_METHOD(ctor, "compute", Compute);
+   Nan::SetPrototypeMethod(ctor, "compute", Compute);
-   target->Set(NanNew("StereoSGBM"), ctor->GetFunction());
+   target->Set(Nan::New("StereoSGBM").ToLocalChecked(), ctor->GetFunction());
-   NanScope();
+   Nan::HandleScope scope;
-   if (args.This()->InternalFieldCount() == 0) {
    NanThrowTypeError("Cannot instantiate without new");
+   if (info.This()->InternalFieldCount() == 0) {
    Nan::ThrowTypeError("Cannot instantiate without new");
-   if (args.Length() == 0) {
+   if (info.Length() == 0) {
-     if (args.Length() >= 3) {
      switch (args.Length()) {
+     if (info.Length() >= 3) {
      switch (info.Length()) {
-         stereo = new StereoSGBM(args[0]->IntegerValue(), args[1]->IntegerValue(),
            args[2]->IntegerValue());
+         stereo = new StereoSGBM(info[0]->IntegerValue(), info[1]->IntegerValue(),
            info[2]->IntegerValue());
-         stereo = new StereoSGBM(args[0]->IntegerValue(), args[1]->IntegerValue(),
            args[2]->IntegerValue(), args[3]->IntegerValue());
+         stereo = new StereoSGBM(info[0]->IntegerValue(), info[1]->IntegerValue(),
            info[2]->IntegerValue(), info[3]->IntegerValue());
-         stereo = new StereoSGBM(args[0]->IntegerValue(), args[1]->IntegerValue(),
            args[2]->IntegerValue(), args[3]->IntegerValue(), args[4]->IntegerValue());
+         stereo = new StereoSGBM(info[0]->IntegerValue(), info[1]->IntegerValue(),
            info[2]->IntegerValue(), info[3]->IntegerValue(), info[4]->IntegerValue());
-         stereo = new StereoSGBM(args[0]->IntegerValue(), args[1]->IntegerValue(),
            args[2]->IntegerValue(), args[3]->IntegerValue(), args[4]->IntegerValue(),
            args[5]->IntegerValue());
+         stereo = new StereoSGBM(info[0]->IntegerValue(), info[1]->IntegerValue(),
            info[2]->IntegerValue(), info[3]->IntegerValue(), info[4]->IntegerValue(),
            info[5]->IntegerValue());
-         stereo = new StereoSGBM(args[0]->IntegerValue(), args[1]->IntegerValue(),
            args[2]->IntegerValue(), args[3]->IntegerValue(), args[4]->IntegerValue(),
            args[5]->IntegerValue(), args[6]->IntegerValue());
+         stereo = new StereoSGBM(info[0]->IntegerValue(), info[1]->IntegerValue(),
            info[2]->IntegerValue(), info[3]->IntegerValue(), info[4]->IntegerValue(),
            info[5]->IntegerValue(), info[6]->IntegerValue());
-         stereo = new StereoSGBM(args[0]->IntegerValue(), args[1]->IntegerValue(),
            args[2]->IntegerValue(), args[3]->IntegerValue(), args[4]->IntegerValue(),
            args[5]->IntegerValue(), args[6]->IntegerValue(), args[7]->IntegerValue());
+         stereo = new StereoSGBM(info[0]->IntegerValue(), info[1]->IntegerValue(),
            info[2]->IntegerValue(), info[3]->IntegerValue(), info[4]->IntegerValue(),
            info[5]->IntegerValue(), info[6]->IntegerValue(), info[7]->IntegerValue());
-         stereo = new StereoSGBM(args[0]->IntegerValue(), args[1]->IntegerValue(),
            args[2]->IntegerValue(), args[3]->IntegerValue(), args[4]->IntegerValue(),
            args[5]->IntegerValue(), args[6]->IntegerValue(), args[7]->IntegerValue(),
            args[8]->IntegerValue());
+         stereo = new StereoSGBM(info[0]->IntegerValue(), info[1]->IntegerValue(),
            info[2]->IntegerValue(), info[3]->IntegerValue(), info[4]->IntegerValue(),
            info[5]->IntegerValue(), info[6]->IntegerValue(), info[7]->IntegerValue(),
            info[8]->IntegerValue());
-         stereo = new StereoSGBM(args[0]->IntegerValue(), args[1]->IntegerValue(),
            args[2]->IntegerValue(), args[3]->IntegerValue(), args[4]->IntegerValue(),
            args[5]->IntegerValue(), args[6]->IntegerValue(), args[7]->IntegerValue(),
            args[8]->IntegerValue(), args[9]->IntegerValue());
+         stereo = new StereoSGBM(info[0]->IntegerValue(), info[1]->IntegerValue(),
            info[2]->IntegerValue(), info[3]->IntegerValue(), info[4]->IntegerValue(),
            info[5]->IntegerValue(), info[6]->IntegerValue(), info[7]->IntegerValue(),
            info[8]->IntegerValue(), info[9]->IntegerValue());
-         stereo = new StereoSGBM(args[0]->IntegerValue(), args[1]->IntegerValue(),
            args[2]->IntegerValue(), args[3]->IntegerValue(), args[4]->IntegerValue(),
            args[5]->IntegerValue(), args[6]->IntegerValue(), args[7]->IntegerValue(),
            args[8]->IntegerValue(), args[9]->IntegerValue(), args[10]->ToBoolean()->Value());
+         stereo = new StereoSGBM(info[0]->IntegerValue(), info[1]->IntegerValue(),
            info[2]->IntegerValue(), info[3]->IntegerValue(), info[4]->IntegerValue(),
            info[5]->IntegerValue(), info[6]->IntegerValue(), info[7]->IntegerValue(),
            info[8]->IntegerValue(), info[9]->IntegerValue(), info[10]->ToBoolean()->Value());
-       NanThrowError("If overriding default settings, must pass minDisparity, numDisparities, and SADWindowSize");
      NanReturnUndefined();
+       Nan::ThrowError("If overriding default settings, must pass minDisparity, numDisparities, and SADWindowSize");
      return;
-   stereo->Wrap(args.Holder());
  NanReturnValue(args.Holder());
+   stereo->Wrap(info.Holder());
  info.GetReturnValue().Set(info.Holder());
-     ObjectWrap(),
+     Nan::ObjectWrap(),
-     ObjectWrap(),
+     Nan::ObjectWrap(),
-     Matrix* m0 = ObjectWrap::Unwrap<Matrix>(args[0]->ToObject());
+     Matrix* m0 = Nan::ObjectWrap::Unwrap<Matrix>(info[0]->ToObject());
-     Matrix* m1 = ObjectWrap::Unwrap<Matrix>(args[1]->ToObject());
+     Matrix* m1 = Nan::ObjectWrap::Unwrap<Matrix>(info[1]->ToObject());
-         NanNew(Matrix::constructor)->GetFunction()->NewInstance();
    Matrix *disp = ObjectWrap::Unwrap<Matrix>(disparityWrap);
+         Nan::New(Matrix::constructor)->GetFunction()->NewInstance();
    Matrix *disp = Nan::ObjectWrap::Unwrap<Matrix>(disparityWrap);
-     NanReturnValue(disparityWrap);
+     info.GetReturnValue().Set(disparityWrap);
-     NanThrowError(err_msg);
    NanReturnUndefined();
+     Nan::ThrowError(err_msg);
    return;
- v8::Persistent<FunctionTemplate> StereoGC::constructor;
+ Nan::Persistent<FunctionTemplate> StereoGC::constructor;
-   NanScope();
+   Nan::HandleScope scope;
-   Local<FunctionTemplate> ctor = NanNew<FunctionTemplate>(StereoGC::New);
  NanAssignPersistent(constructor, ctor);
+   Local<FunctionTemplate> ctor = Nan::New<FunctionTemplate>(StereoGC::New);
  constructor.Reset(ctor);
-   ctor->SetClassName(NanNew("StereoGC"));
+   ctor->SetClassName(Nan::New("StereoGC").ToLocalChecked());
-   NODE_SET_PROTOTYPE_METHOD(ctor, "compute", Compute);
+   Nan::SetPrototypeMethod(ctor, "compute", Compute);
-   target->Set(NanNew("StereoGC"), ctor->GetFunction());
+   target->Set(Nan::New("StereoGC").ToLocalChecked(), ctor->GetFunction());
-   NanScope();
+   Nan::HandleScope scope;
-   if (args.This()->InternalFieldCount() == 0)
  NanThrowTypeError("Cannot instantiate without new");
+   if (info.This()->InternalFieldCount() == 0)
  Nan::ThrowTypeError("Cannot instantiate without new");
-   if (args.Length() == 0) {
+   if (info.Length() == 0) {
-   } else if (args.Length() == 1) {
+   } else if (info.Length() == 1) {
-     stereo = new StereoGC(args[0]->IntegerValue());
+     stereo = new StereoGC(info[0]->IntegerValue());
-     stereo = new StereoGC(args[0]->IntegerValue(), args[1]->IntegerValue());
+     stereo = new StereoGC(info[0]->IntegerValue(), info[1]->IntegerValue());
-   stereo->Wrap(args.Holder());
  NanReturnValue(args.Holder());
+   stereo->Wrap(info.Holder());
  info.GetReturnValue().Set(info.Holder());
-     ObjectWrap() {
+     Nan::ObjectWrap() {
-     Matrix* m0 = ObjectWrap::Unwrap<Matrix>(args[0]->ToObject());
+     Matrix* m0 = Nan::ObjectWrap::Unwrap<Matrix>(info[0]->ToObject());
-     Matrix* m1 = ObjectWrap::Unwrap<Matrix>(args[1]->ToObject());
+     Matrix* m1 = Nan::ObjectWrap::Unwrap<Matrix>(info[1]->ToObject());
-         NanNew(Matrix::constructor)->GetFunction()->NewInstance();
    Matrix *disp = ObjectWrap::Unwrap<Matrix>(disparityWrap);
+         Nan::New(Matrix::constructor)->GetFunction()->NewInstance();
    Matrix *disp = Nan::ObjectWrap::Unwrap<Matrix>(disparityWrap);
-     NanReturnValue(disparityWrap);
+     info.GetReturnValue().Set(disparityWrap);
-     NanThrowError(err_msg);
    NanReturnUndefined();
+     Nan::ThrowError(err_msg);
    return;

Lines changed in src/Stereo.h

- class StereoBM: public node::ObjectWrap {
+ class StereoBM: public Nan::ObjectWrap {
-   static Persistent<FunctionTemplate> constructor;
+   static Nan::Persistent<FunctionTemplate> constructor;
- class StereoSGBM: public node::ObjectWrap {
+ class StereoSGBM: public Nan::ObjectWrap {
-   static Persistent<FunctionTemplate> constructor;
+   static Nan::Persistent<FunctionTemplate> constructor;
- class StereoGC: public node::ObjectWrap {
+ class StereoGC: public Nan::ObjectWrap {
-   static Persistent<FunctionTemplate> constructor;
+   static Nan::Persistent<FunctionTemplate> constructor;

Lines changed in src/VideoCaptureWrap.cc

- v8::Persistent<FunctionTemplate> VideoCaptureWrap::constructor;
+ Nan::Persistent<FunctionTemplate> VideoCaptureWrap::constructor;
-   Persistent<Function> cb;
+   Nan::Persistent<Function> cb;
-   NanScope();
+   Nan::HandleScope scope;
-   Local<FunctionTemplate> ctor = NanNew<FunctionTemplate>(VideoCaptureWrap::New);
  NanAssignPersistent(constructor, ctor);
+   Local<FunctionTemplate> ctor = Nan::New<FunctionTemplate>(VideoCaptureWrap::New);
  constructor.Reset(ctor);
-   ctor->SetClassName(NanNew("VideoCapture"));
+   ctor->SetClassName(Nan::New("VideoCapture").ToLocalChecked());
-   NODE_SET_PROTOTYPE_METHOD(ctor, "read", Read);
  NODE_SET_PROTOTYPE_METHOD(ctor, "setWidth", SetWidth);
  NODE_SET_PROTOTYPE_METHOD(ctor, "setHeight", SetHeight);
  NODE_SET_PROTOTYPE_METHOD(ctor, "setPosition", SetPosition);
  NODE_SET_PROTOTYPE_METHOD(ctor, "close", Close);
  NODE_SET_PROTOTYPE_METHOD(ctor, "ReadSync", ReadSync);
  NODE_SET_PROTOTYPE_METHOD(ctor, "grab", Grab);
  NODE_SET_PROTOTYPE_METHOD(ctor, "retrieve", Retrieve);
+   Nan::SetPrototypeMethod(ctor, "read", Read);
  Nan::SetPrototypeMethod(ctor, "setWidth", SetWidth);
  Nan::SetPrototypeMethod(ctor, "setHeight", SetHeight);
  Nan::SetPrototypeMethod(ctor, "setPosition", SetPosition);
  Nan::SetPrototypeMethod(ctor, "close", Close);
  Nan::SetPrototypeMethod(ctor, "ReadSync", ReadSync);
  Nan::SetPrototypeMethod(ctor, "grab", Grab);
  Nan::SetPrototypeMethod(ctor, "retrieve", Retrieve);
-   target->Set(NanNew("VideoCapture"), ctor->GetFunction());
+   target->Set(Nan::New("VideoCapture").ToLocalChecked(), ctor->GetFunction());
-   NanScope();
+   Nan::HandleScope scope;
-   if (args.This()->InternalFieldCount() == 0)
  return NanThrowTypeError("Cannot Instantiate without new");
+   if (info.This()->InternalFieldCount() == 0)
  return Nan::ThrowTypeError("Cannot Instantiate without new");
-   if (args[0]->IsNumber()) {
    v = new VideoCaptureWrap(args[0]->NumberValue());
+   if (info[0]->IsNumber()) {
    v = new VideoCaptureWrap(info[0]->NumberValue());
-     v = new VideoCaptureWrap(std::string(*NanAsciiString(args[0]->ToString())));
+     v = new VideoCaptureWrap(std::string(*Nan::Utf8String(info[0]->ToString())));
-   v->Wrap(args.This());
+   v->Wrap(info.This());
-   NanReturnValue(args.This());
+   info.GetReturnValue().Set(info.This());
-   NanScope();
+   Nan::HandleScope scope;
-     NanThrowError("Camera could not be opened");
+     Nan::ThrowError("Camera could not be opened");
-   NanScope();
+   Nan::HandleScope scope;
-     NanThrowError("Video file could not be opened (opencv reqs. non relative paths)");
+     Nan::ThrowError("Video file could not be opened (opencv reqs. non relative paths)");
-   NanScope();
  VideoCaptureWrap *v = ObjectWrap::Unwrap<VideoCaptureWrap>(args.This());
+   Nan::HandleScope scope;
  VideoCaptureWrap *v = Nan::ObjectWrap::Unwrap<VideoCaptureWrap>(info.This());
-   if(args.Length() != 1)
  NanReturnUndefined();
+   if(info.Length() != 1)
  return;
-   int w = args[0]->IntegerValue();
+   int w = info[0]->IntegerValue();
-   NanReturnUndefined();
+   return;
-   NanScope();
  VideoCaptureWrap *v = ObjectWrap::Unwrap<VideoCaptureWrap>(args.This());
+   Nan::HandleScope scope;
  VideoCaptureWrap *v = Nan::ObjectWrap::Unwrap<VideoCaptureWrap>(info.This());
-   if(args.Length() != 1)
  NanReturnUndefined();
+   if(info.Length() != 1)
  return;
-   int h = args[0]->IntegerValue();
+   int h = info[0]->IntegerValue();
-   NanReturnUndefined();
+   return;
-   NanScope();
  VideoCaptureWrap *v = ObjectWrap::Unwrap<VideoCaptureWrap>(args.This());
+   Nan::HandleScope scope;
  VideoCaptureWrap *v = Nan::ObjectWrap::Unwrap<VideoCaptureWrap>(info.This());
-   if(args.Length() != 1)
  NanReturnUndefined();
+   if(info.Length() != 1)
  return;
-   int pos = args[0]->IntegerValue();
+   int pos = info[0]->IntegerValue();
-   NanReturnUndefined();
+   return;
-   NanScope();
  VideoCaptureWrap *v = ObjectWrap::Unwrap<VideoCaptureWrap>(args.This());
+   Nan::HandleScope scope;
  VideoCaptureWrap *v = Nan::ObjectWrap::Unwrap<VideoCaptureWrap>(info.This());
-   NanReturnUndefined();
+   return;
- class AsyncVCWorker: public NanAsyncWorker {
+ class AsyncVCWorker: public Nan::AsyncWorker {
-   AsyncVCWorker(NanCallback *callback, VideoCaptureWrap* vc,
+   AsyncVCWorker(Nan::Callback *callback, VideoCaptureWrap* vc,
-       NanAsyncWorker(callback),
+       Nan::AsyncWorker(callback),
-     NanScope();
+     Nan::HandleScope scope;
-     Local<Object> im_to_return= NanNew(Matrix::constructor)->GetFunction()->NewInstance();
    Matrix *img = ObjectWrap::Unwrap<Matrix>(im_to_return);
+     Local<Object> im_to_return= Nan::New(Matrix::constructor)->GetFunction()->NewInstance();
    Matrix *img = Nan::ObjectWrap::Unwrap<Matrix>(im_to_return);
-       NanNull()
+       Nan::Null()
-   NanScope();
  VideoCaptureWrap *v = ObjectWrap::Unwrap<VideoCaptureWrap>(args.This());
+   Nan::HandleScope scope;
  VideoCaptureWrap *v = Nan::ObjectWrap::Unwrap<VideoCaptureWrap>(info.This());
-   NanCallback *callback = new NanCallback(cb.As<Function>());
  NanAsyncQueueWorker(new AsyncVCWorker(callback, v));
+   Nan::Callback *callback = new Nan::Callback(cb.As<Function>());
  Nan::AsyncQueueWorker(new AsyncVCWorker(callback, v));
-   NanReturnUndefined();
+   return;
-   NanScope();
  VideoCaptureWrap *v = ObjectWrap::Unwrap<VideoCaptureWrap>(args.This());
+   Nan::HandleScope scope;
  VideoCaptureWrap *v = Nan::ObjectWrap::Unwrap<VideoCaptureWrap>(info.This());
-   Local<Object> im_to_return= NanNew(Matrix::constructor)->GetFunction()->NewInstance();
  Matrix *img = ObjectWrap::Unwrap<Matrix>(im_to_return);
+   Local<Object> im_to_return= Nan::New(Matrix::constructor)->GetFunction()->NewInstance();
  Matrix *img = Nan::ObjectWrap::Unwrap<Matrix>(im_to_return);
-   NanReturnValue(im_to_return);
+   info.GetReturnValue().Set(im_to_return);
- class AsyncGrabWorker: public NanAsyncWorker {
+ class AsyncGrabWorker: public Nan::AsyncWorker {
-   AsyncGrabWorker(NanCallback *callback, VideoCaptureWrap* vc) :
      NanAsyncWorker(callback),
+   AsyncGrabWorker(Nan::Callback *callback, VideoCaptureWrap* vc) :
      Nan::AsyncWorker(callback),
-   NanScope();
  VideoCaptureWrap *v = ObjectWrap::Unwrap<VideoCaptureWrap>(args.This());
+   Nan::HandleScope scope;
  VideoCaptureWrap *v = Nan::ObjectWrap::Unwrap<VideoCaptureWrap>(info.This());
-   NanCallback *callback = new NanCallback(cb.As<Function>());
  NanAsyncQueueWorker(new AsyncGrabWorker(callback, v));
+   Nan::Callback *callback = new Nan::Callback(cb.As<Function>());
  Nan::AsyncQueueWorker(new AsyncGrabWorker(callback, v));
-   NanReturnUndefined();
+   return;
-   NanScope();
  VideoCaptureWrap *v = ObjectWrap::Unwrap<VideoCaptureWrap>(args.This());
+   Nan::HandleScope scope;
  VideoCaptureWrap *v = Nan::ObjectWrap::Unwrap<VideoCaptureWrap>(info.This());
-   NanCallback *callback = new NanCallback(cb.As<Function>());
  NanAsyncQueueWorker(new AsyncVCWorker(callback, v, true, channel));
+   Nan::Callback *callback = new Nan::Callback(cb.As<Function>());
  Nan::AsyncQueueWorker(new AsyncVCWorker(callback, v, true, channel));
-   NanReturnUndefined();
+   return;

Lines changed in src/VideoCaptureWrap.h

- class VideoCaptureWrap: public node::ObjectWrap {
+ class VideoCaptureWrap: public Nan::ObjectWrap {
-   static Persistent<FunctionTemplate> constructor;
+   static Nan::Persistent<FunctionTemplate> constructor;

Lines changed in src/init.cc

-   NanScope();
+   Nan::HandleScope scope;

Suggested changes in your JavaScript files

buffer

Please review changes in Node API for buffer module used in these files:

[Docs]

  • External memory is now allocated using TypedArrays, instead of using SlowBuffer or smalloc as the parent backing.

  • Buffer.concat() now always creates a new buffer, even if only called with one element.
  • SlowBuffer has been repurposed to return a Buffer instance who's parent backing is not pooled.
  • Buffer.prototype.toJSON()'s output is no longer the same as an array. Instead it is an object specifically tagged as a buffer, which can be recovered by passing it to (a new overload of) the Buffer constructor.
  • Buffer.prototype.parent is now a getter that points to buffer.buffer if the buffer's size is greater than zero.
  • Buffer.prototype.offset is now a read-only getter that returns buffer.byteOffset.
  • Buffer.prototype.fill() now accepts multi-character strings and will fill with the entire passed value. Additionally, fill() now returns its buffer and can be chained.
  • Buffer.prototype._charsWritten no longer is written to, nor exists.

Buffer changes from V8

Implementation changes in V8 have caused subtle impacts how buffers work with encodings in certain cases.

  • (new Buffer('text\0!', 'ascii')).toString() outputs 'text !' in 0.10 and 'text\u0000!' in 0.12.
  • Invalid unicode characters are replaced to no longer become invalid.

process

Please review changes in Node API for process module used in these files:

[Docs]

  • Added the concept of beforeExit time.
    • Before the process emits 'exit' and begins shutting down, it will emit a 'beforeExit' event. Code that is run in the 'beforeExit' event can schedule async operations that will hold the event loop open, unlike 'exit' where it is too late to async operations.
    • Refs: a2eeb43
  • Chunked writes to sdtout/stderr will now be lost if the process is terminated early.
    • Chunked writes happen when the string to be written is beyond a certain, fairly large, size.
    • Refs: #784, #1771
  • process.kill() now throws errors on non-numeric input.
    • Strings that can be coerced to numbers still work. e.g. process.kill('0').
    • Refs: 832ec1c, 743a009
  • process.maxTickDepth has been removed, allowing process.nextTick() to starve I/O indefinitely.
    • This is due to adding setImmediate() in 0.10.
    • It is suggested you use setImmediate() over process.NextTick(). setImmediate() likely does what you are hoping for (a more efficient setTimeout(..., 0)), and runs after this tick's I/O. process.nextTick() does not actually run in the "next" tick anymore and will block I/O as if it were a synchronous operation.
    • Refs: 0761c90, 9a6c085
  • process.send() is now always asynchronous, where previously it was blocking on Unix.
    • Pull request #2620, which should land before 4.0.0, will make send() accept a callback as the last argument, with will be called with one argument: null if it succeeded, or an Error if it failed.
    • Refs: #760, #2620

Signal handling

In node 0.10.x, exit from a fatal signal was accomplished by a signal handler in node which called exit(128 + signo). So for SIGINT (signal 2), a node process observing the exit of a spawned node process would observe that process exiting 130, but no signal would be noted (see waitid(2) for more information on how a process waiting for another determines if the waitee exited due to a signal). In node 0.12.x, a node process observing the exit of a spawned child node process will see a null code, and a 'SIGINT' as the signal.

Here is a pair of test programs which illustrates the difference.

$ cat sleeper.js
setTimeout(function () {}, 300000)

$ cat test.js
var cp = require("child_process")
var p = cp.spawn("node", ["sleeper.js"])
p.on('exit', function (code, signal) {
  console.log("code=" + code + ", signal=" + signal)
})
setTimeout(function () { p.kill('SIGINT') }, 2000)

On node 0.10 this produces:

$ node test.js
code=130, signal=null

On node 0.12+ this produces:

$ node test.js
code=null, signal=SIGINT

This can be a subtle porting issue for multi-process node environments which care about signals (such as test harnesses). This change was introduced by c61b0e9main: Handle SIGINT properly.


util

Please review changes in Node API for util module used in these files:

[Docs]

  • util.is*() (isArray() ... isUndefined()) type-checking functions were added in 0.12 but are scheduled for deprecation. Please use user-land solutions instead.
    • The type checking these use will be come brittle with the eventual addition of Symbol.toStringTag.
    • Refs: #2447
  • Updated util.format() to receive several changes:
    • -0 is now displayed as such, instead of as 0.
    • Anything that is instanceof Error is now formatted as an error.
    • Circular references in JavaScript objects are now handled for the %j specifier.
    • Custom inspect functions now receive any arguments passed to util.inspect.
    • Displays the constructor name if available.
  • The following utilities were deprecated in 896b2aa: