diff --git a/CMakeLists.txt b/CMakeLists.txt index 1e7ce39851..945bb73cb9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -124,6 +124,7 @@ OCV_OPTION(WITH_V4L "Include Video 4 Linux support" ON OCV_OPTION(WITH_VIDEOINPUT "Build HighGUI with DirectShow support" ON IF WIN32 ) OCV_OPTION(WITH_XIMEA "Include XIMEA cameras support" OFF IF WIN32 ) OCV_OPTION(WITH_XINE "Include Xine support (GPL)" OFF IF (UNIX AND NOT APPLE AND NOT ANDROID AND NOT IOS) ) +OCV_OPTION(WITH_CLP "Include Clp support (EPL)" OFF IF (NOT ANDROID AND NOT IOS) ) # OpenCV build components # =================================================== @@ -527,6 +528,22 @@ if(WITH_EIGEN) endif() endif() +########################## Clp ##################################### +set(HAVE_CLP FALSE) + +if(WITH_CLP) + find_path(CLP_INCLUDE_PATH "coin" + PATHS "/usr/local/include" "/usr/include" "/opt/include" + DOC "The path to Clp headers") + if(CLP_INCLUDE_PATH) + ocv_include_directories(${CLP_INCLUDE_PATH}) + set(CLP_LIBRARY_DIR "${CLP_INCLUDE_PATH}/../lib" CACHE PATH "Full path of Clp library directory") + link_directories(${CLP_LIBRARY_DIR}) + set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} Clp OsiClp CoinUtils) + set(HAVE_CLP TRUE) + endif() +endif() + ################## Extra HighGUI libs on Windows ################### if(WIN32) set(HIGHGUI_LIBRARIES ${HIGHGUI_LIBRARIES} comctl32 gdi32 ole32) @@ -799,6 +816,7 @@ endif() status(" Use TBB:" HAVE_TBB THEN YES ELSE NO) status(" Use Cuda:" HAVE_CUDA THEN YES ELSE NO) status(" Use Eigen:" HAVE_EIGEN THEN YES ELSE NO) +status(" Use Clp:" HAVE_CLP THEN YES ELSE NO) status("") status(" Python interpreter:" PYTHON_EXECUTABLE THEN "${PYTHON_EXECUTABLE} (ver ${PYTHON_VERSION_MAJOR_MINOR})" ELSE NO) diff --git a/cmake/templates/cvconfig.h.cmake b/cmake/templates/cvconfig.h.cmake index 3c501ca917..457dd4ae0e 100644 --- a/cmake/templates/cvconfig.h.cmake +++ b/cmake/templates/cvconfig.h.cmake @@ -195,3 +195,6 @@ /* OpenGL support*/ #cmakedefine HAVE_OPENGL + +/* Clp support */ +#cmakedefine HAVE_CLP diff --git a/modules/videostab/include/opencv2/videostab/motion_stabilizing.hpp b/modules/videostab/include/opencv2/videostab/motion_stabilizing.hpp index d51f3a5e24..6d1522bbce 100644 --- a/modules/videostab/include/opencv2/videostab/motion_stabilizing.hpp +++ b/modules/videostab/include/opencv2/videostab/motion_stabilizing.hpp @@ -46,6 +46,7 @@ #include #include #include "opencv2/core/core.hpp" +#include "opencv2/videostab/global_motion.hpp" namespace cv { @@ -108,6 +109,22 @@ private: std::vector weight_; }; +class CV_EXPORTS LpMotionStabilizer : public IMotionStabilizer +{ +public: + LpMotionStabilizer(MotionModel model = LINEAR_SIMILARITY); + + void setMotionModel(MotionModel val) { model_ = val; } + MotionModel motionModel() const { return model_; } + + virtual void stabilize( + int size, const std::vector &motions, std::pair range, + Mat *stabilizationMotions) const; + +private: + MotionModel model_; +}; + CV_EXPORTS Mat ensureInclusionConstraint(const Mat &M, Size size, float trimRatio); CV_EXPORTS float estimateOptimalTrimRatio(const Mat &M, Size size); diff --git a/modules/videostab/include/opencv2/videostab/optical_flow.hpp b/modules/videostab/include/opencv2/videostab/optical_flow.hpp index 6aa82d5a46..c42b016a66 100644 --- a/modules/videostab/include/opencv2/videostab/optical_flow.hpp +++ b/modules/videostab/include/opencv2/videostab/optical_flow.hpp @@ -47,7 +47,7 @@ #include "opencv2/opencv_modules.hpp" #if HAVE_OPENCV_GPU -# include "opencv2/gpu/gpu.hpp" +#include "opencv2/gpu/gpu.hpp" #endif namespace cv diff --git a/modules/videostab/src/motion_stabilizing.cpp b/modules/videostab/src/motion_stabilizing.cpp index 169da998b5..6300f0a92c 100644 --- a/modules/videostab/src/motion_stabilizing.cpp +++ b/modules/videostab/src/motion_stabilizing.cpp @@ -45,6 +45,10 @@ #include "opencv2/videostab/global_motion.hpp" #include "opencv2/videostab/ring_buffer.hpp" +#ifdef HAVE_CLP +#include "coin/ClpSimplex.hpp" +#endif + using namespace std; namespace cv @@ -254,5 +258,27 @@ float estimateOptimalTrimRatio(const Mat &M, Size size) return r; } + +LpMotionStabilizer::LpMotionStabilizer(MotionModel model) +{ + setMotionModel(model); +} + + +#ifndef HAVE_CLP +void LpMotionStabilizer::stabilize(int, const vector&, pair, Mat*) const +{ + CV_Error(CV_StsError, "The library is built without Clp support"); +} +#else +void LpMotionStabilizer::stabilize( + int size, const vector &motions, pair range, + Mat *stabilizationMotions) const +{ + // TODO implement + CV_Error(CV_StsNotImplemented, "LpMotionStabilizer::stabilize"); +} +#endif + } // namespace videostab } // namespace cv