From 2a81f236c50a6fd5bca7ba6f7a0551ba04bef591 Mon Sep 17 00:00:00 2001 From: Michael Vines Date: Sun, 7 Feb 2016 09:49:43 -0800 Subject: [PATCH] Base OpenCV 3 port --- README.md | 3 ++- binding.gyp | 10 +++++----- examples/dissimilarity.js | 5 +++++ src/BackgroundSubtractor.cc | 6 +++++- src/BackgroundSubtractor.h | 2 +- src/Calib3D.h | 4 ++++ src/CamShift.cc | 3 +++ src/CascadeClassifierWrap.h | 3 +++ src/FaceRecognizer.cc | 6 +++++- src/FaceRecognizer.h | 2 +- src/Features2d.cc | 5 +++-- src/Features2d.h | 2 +- src/LDAWrap.cc | 7 +++++-- src/LDAWrap.h | 2 +- src/OpenCV.h | 5 +++++ src/Stereo.cc | 9 +++++++++ src/Stereo.h | 3 +++ src/init.cc | 9 ++++++--- test/unit.js | 6 ++++++ utils/find-opencv.js | 14 +++++++++++--- 20 files changed, 84 insertions(+), 22 deletions(-) diff --git a/README.md b/README.md index 653ffec..6bf0720 100755 --- a/README.md +++ b/README.md @@ -13,7 +13,8 @@ cool, I'd love to hear about it! ## Install -You'll need OpenCV 2.3.1 or newer installed before installing node-opencv. +You'll need OpenCV 2.3.1 or newer installed before installing node-opencv. Note +that OpenCV 3.x is not yet fully supported. ## Specific for Windows 1. Download and install OpenCV (Be sure to use a 2.4 version) @ diff --git a/binding.gyp b/binding.gyp index b89d3e0..1d5e1c3 100755 --- a/binding.gyp +++ b/binding.gyp @@ -39,7 +39,7 @@ "conditions": [ [ "OS==\"linux\" or OS==\"freebsd\" or OS==\"openbsd\" or OS==\"solaris\" or OS==\"aix\"", { "cflags": [ - "= 2.3.1\" )", + "= 2.3.1\" )", + " #include -#if ((CV_MAJOR_VERSION >= 2) && (CV_MINOR_VERSION >=4)) +#if CV_MAJOR_VERSION >= 3 +#warning TODO: port me to OpenCV 3 +#endif + +#if ((CV_MAJOR_VERSION == 2) && (CV_MINOR_VERSION >=4)) Nan::Persistent BackgroundSubtractorWrap::constructor; diff --git a/src/BackgroundSubtractor.h b/src/BackgroundSubtractor.h index 551d212..d661e33 100644 --- a/src/BackgroundSubtractor.h +++ b/src/BackgroundSubtractor.h @@ -1,6 +1,6 @@ #include "OpenCV.h" -#if ((CV_MAJOR_VERSION >= 2) && (CV_MINOR_VERSION >=4)) +#if ((CV_MAJOR_VERSION == 2) && (CV_MINOR_VERSION >=4)) #include diff --git a/src/Calib3D.h b/src/Calib3D.h index 7d94943..a1846c8 100644 --- a/src/Calib3D.h +++ b/src/Calib3D.h @@ -3,6 +3,10 @@ #include "OpenCV.h" +#if CV_MAJOR_VERSION >= 3 +#include +#endif + /** * Implementation of calib3d.hpp functions */ diff --git a/src/CamShift.cc b/src/CamShift.cc index fed246a..bcf00ce 100644 --- a/src/CamShift.cc +++ b/src/CamShift.cc @@ -2,6 +2,9 @@ #include "OpenCV.h" #include "Matrix.h" +#if CV_MAJOR_VERSION >= 3 +#include +#endif #define CHANNEL_HUE 0 #define CHANNEL_SATURATION 1 diff --git a/src/CascadeClassifierWrap.h b/src/CascadeClassifierWrap.h index 0f80ba1..d21c370 100755 --- a/src/CascadeClassifierWrap.h +++ b/src/CascadeClassifierWrap.h @@ -1,4 +1,7 @@ #include "OpenCV.h" +#if CV_MAJOR_VERSION >= 3 +#include +#endif class CascadeClassifierWrap: public Nan::ObjectWrap { public: diff --git a/src/FaceRecognizer.cc b/src/FaceRecognizer.cc index 9a2dd69..47823c5 100644 --- a/src/FaceRecognizer.cc +++ b/src/FaceRecognizer.cc @@ -1,7 +1,11 @@ #include "FaceRecognizer.h" #include "OpenCV.h" -#if ((CV_MAJOR_VERSION >= 2) && (CV_MINOR_VERSION >=4) && (CV_SUBMINOR_VERSION>=4)) +#if CV_MAJOR_VERSION >= 3 +#warning TODO: port me to OpenCV 3 +#endif + +#if ((CV_MAJOR_VERSION == 2) && (CV_MINOR_VERSION >=4) && (CV_SUBMINOR_VERSION>=4)) #include "Matrix.h" #include diff --git a/src/FaceRecognizer.h b/src/FaceRecognizer.h index 3afbf76..0224c28 100644 --- a/src/FaceRecognizer.h +++ b/src/FaceRecognizer.h @@ -1,6 +1,6 @@ #include "OpenCV.h" -#if ((CV_MAJOR_VERSION >= 2) && (CV_MINOR_VERSION >=4)) +#if ((CV_MAJOR_VERSION == 2) && (CV_MINOR_VERSION >=4) && (CV_SUBMINOR_VERSION>=4)) #include "opencv2/contrib/contrib.hpp" diff --git a/src/Features2d.cc b/src/Features2d.cc index 596ce98..fa8f1cb 100644 --- a/src/Features2d.cc +++ b/src/Features2d.cc @@ -1,10 +1,11 @@ +#include "OpenCV.h" + +#if ((CV_MAJOR_VERSION == 2) && (CV_MINOR_VERSION >=4)) #include "Features2d.h" #include "Matrix.h" #include #include -#if ((CV_MAJOR_VERSION >= 2) && (CV_MINOR_VERSION >=4)) - void Features::Init(Local target) { Nan::HandleScope scope; diff --git a/src/Features2d.h b/src/Features2d.h index 6ae2b21..e793f86 100644 --- a/src/Features2d.h +++ b/src/Features2d.h @@ -1,6 +1,6 @@ #include "OpenCV.h" -#if ((CV_MAJOR_VERSION >= 2) && (CV_MINOR_VERSION >=4)) +#if ((CV_MAJOR_VERSION == 2) && (CV_MINOR_VERSION >=4)) #include #include diff --git a/src/LDAWrap.cc b/src/LDAWrap.cc index c155bd2..b787dbf 100644 --- a/src/LDAWrap.cc +++ b/src/LDAWrap.cc @@ -1,8 +1,11 @@ -#include "LDAWrap.h" #include "OpenCV.h" -#if ((CV_MAJOR_VERSION >= 2) && (CV_MINOR_VERSION >=4) && (CV_SUBMINOR_VERSION>=4)) +#if CV_MAJOR_VERSION >= 3 +#warning TODO: port me to OpenCV 3 +#endif +#if ((CV_MAJOR_VERSION == 2) && (CV_MINOR_VERSION >=4) && (CV_SUBMINOR_VERSION>=4)) +#include "LDAWrap.h" #include "Matrix.h" #include diff --git a/src/LDAWrap.h b/src/LDAWrap.h index 2c47cba..44671d3 100644 --- a/src/LDAWrap.h +++ b/src/LDAWrap.h @@ -1,6 +1,6 @@ #include "OpenCV.h" -#if ((CV_MAJOR_VERSION >= 2) && (CV_MINOR_VERSION >=4)) +#if ((CV_MAJOR_VERSION == 2) && (CV_MINOR_VERSION >=4)) #include "opencv2/contrib/contrib.hpp" diff --git a/src/OpenCV.h b/src/OpenCV.h index 0bb2b96..9eab257 100755 --- a/src/OpenCV.h +++ b/src/OpenCV.h @@ -18,6 +18,11 @@ #include #include #include +#if CV_MAJOR_VERSION >= 3 +#include +#include +#include +#endif #include #include diff --git a/src/Stereo.cc b/src/Stereo.cc index f8d1c11..7831b66 100644 --- a/src/Stereo.cc +++ b/src/Stereo.cc @@ -1,4 +1,11 @@ + #include "Stereo.h" + +#if CV_MAJOR_VERSION >= 3 +#warning TODO: port me to OpenCV 3 +#endif + +#if CV_MAJOR_VERSION < 3 #include "Matrix.h" #include @@ -312,3 +319,5 @@ NAN_METHOD(StereoGC::Compute) { return; } } + +#endif diff --git a/src/Stereo.h b/src/Stereo.h index fbbdb58..08fdaf0 100644 --- a/src/Stereo.h +++ b/src/Stereo.h @@ -3,6 +3,8 @@ #include "OpenCV.h" +#if CV_MAJOR_VERSION < 3 + class StereoBM: public Nan::ObjectWrap { public: cv::StereoBM stereo; @@ -51,3 +53,4 @@ public: }; #endif +#endif // __NODE_STEREO_H diff --git a/src/init.cc b/src/init.cc index a3af3be..75cb397 100755 --- a/src/init.cc +++ b/src/init.cc @@ -30,15 +30,18 @@ extern "C" void init(Local target) { Constants::Init(target); Calib3D::Init(target); ImgProc::Init(target); +#if CV_MAJOR_VERSION < 3 StereoBM::Init(target); StereoSGBM::Init(target); StereoGC::Init(target); - -#if CV_MAJOR_VERSION >= 2 && CV_MINOR_VERSION >=4 +#if CV_MAJOR_VERSION == 2 && CV_MINOR_VERSION >=4 BackgroundSubtractorWrap::Init(target); Features::Init(target); - FaceRecognizerWrap::Init(target); LDAWrap::Init(target); +#if CV_SUBMINOR_VERSION>=4 + FaceRecognizerWrap::Init(target); +#endif +#endif #endif }; diff --git a/test/unit.js b/test/unit.js index 8cd5ea4..fa82735 100755 --- a/test/unit.js +++ b/test/unit.js @@ -315,6 +315,12 @@ test("fonts", function(t) { }) test('LDA Wrap', function(assert) { + if (cv.LDA === undefined) { + console.log('TODO: Please port LDAWrap.cc to OpenCV 3') + assert.end(); + return; + } + // subspaceProject var mat = cv.LDA.subspaceProject(new cv.Matrix(1, 2, cv.Constants.CV_64F), new cv.Matrix(), new cv.Matrix(2, 1, cv.Constants.CV_8UC1)); assert.deepEqual(mat.size(), [2,2], 'subspaceProject'); diff --git a/utils/find-opencv.js b/utils/find-opencv.js index fd343a2..c3731ad 100644 --- a/utils/find-opencv.js +++ b/utils/find-opencv.js @@ -1,16 +1,24 @@ +"use strict"; + var exec = require("child_process").exec; var fs = require("fs"); -var flag = process.argv[2]; +var flag = process.argv[2] || "--exists"; + +// Normally |pkg-config opencv ...| could report either OpenCV 2.x or OpenCV 3.y +// depending on what is installed. To enable both 2.x and 3.y to co-exist on +// the same machine, the opencv.pc for 3.y can be installed as opencv3.pc and +// then selected by |export PKG_CONFIG_OPENCV3=1| before building node-opencv. +var opencv = process.env.PKG_CONFIG_OPENCV3 === "1" ? "opencv3" : '"opencv >= 2.3.1"'; function main(){ //Try using pkg-config, but if it fails and it is on Windows, try the fallback - exec("pkg-config opencv " + flag, function(error, stdout, stderr){ + exec("pkg-config " + opencv + " " + flag, function(error, stdout, stderr){ if(error){ if(process.platform === "win32"){ fallback(); } else{ - throw new Error("ERROR: pkg-config couldn't find OpenCV"); + throw new Error("ERROR: failed to run: pkg-config", opencv, flag); } } else{