Added support of Clp for Windows

pull/2/head
Alexey Spizhevoy 13 years ago
parent 601d2843f4
commit 306248e444
  1. 16
      CMakeLists.txt
  2. 2
      modules/videostab/src/global_motion.cpp
  3. 32
      modules/videostab/src/motion_stabilizing.cpp

@ -124,7 +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_VIDEOINPUT "Build HighGUI with DirectShow support" ON IF WIN32 )
OCV_OPTION(WITH_XIMEA "Include XIMEA cameras support" OFF 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_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 (UNIX AND NOT ANDROID AND NOT IOS) ) OCV_OPTION(WITH_CLP "Include Clp support (EPL)" OFF IF (NOT ANDROID AND NOT IOS) )
# OpenCV build components # OpenCV build components
# =================================================== # ===================================================
@ -572,6 +572,8 @@ endif()
set(HAVE_CLP FALSE) set(HAVE_CLP FALSE)
if(WITH_CLP) if(WITH_CLP)
if(UNIX)
PKG_CHECK_MODULES(CLP clp) PKG_CHECK_MODULES(CLP clp)
if(CLP_FOUND) if(CLP_FOUND)
set(HAVE_CLP TRUE) set(HAVE_CLP TRUE)
@ -580,18 +582,26 @@ if(WITH_CLP)
endif() endif()
link_directories(${CLP_LIBRARY_DIRS}) link_directories(${CLP_LIBRARY_DIRS})
set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} ${CLP_LIBRARIES}) set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} ${CLP_LIBRARIES})
else() endif()
endif()
if(NOT CLP_FOUND)
find_path(CLP_INCLUDE_PATH "coin" find_path(CLP_INCLUDE_PATH "coin"
PATHS "/usr/local/include" "/usr/include" "/opt/include" PATHS "/usr/local/include" "/usr/include" "/opt/include"
DOC "The path to Clp headers") DOC "The path to Clp headers")
if(CLP_INCLUDE_PATH) if(CLP_INCLUDE_PATH)
ocv_include_directories(${CLP_INCLUDE_PATH}) ocv_include_directories(${CLP_INCLUDE_PATH} "${CLP_INCLUDE_PATH}/coin")
set(CLP_LIBRARY_DIR "${CLP_INCLUDE_PATH}/../lib" CACHE PATH "Full path of Clp library directory") set(CLP_LIBRARY_DIR "${CLP_INCLUDE_PATH}/../lib" CACHE PATH "Full path of Clp library directory")
link_directories(${CLP_LIBRARY_DIR}) link_directories(${CLP_LIBRARY_DIR})
if(UNIX)
set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} Clp CoinUtils bz2 z lapack blas m) set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} Clp CoinUtils bz2 z lapack blas m)
else()
set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} libClp libCoinUtils)
endif()
set(HAVE_CLP TRUE) set(HAVE_CLP TRUE)
endif() endif()
endif() endif()
endif() endif()
################## Extra HighGUI libs on Windows ################### ################## Extra HighGUI libs on Windows ###################

@ -447,7 +447,7 @@ Mat PyrLkRobustMotionEstimator::estimate(const Mat &frame0, const Mat &frame1, b
ninliers = 0; ninliers = 0;
rmse = 0; rmse = 0;
Point2d p0, p1; Point2f p0, p1;
float x, y, z; float x, y, z;
for (size_t i = 0; i < pointsGood_.size(); ++i) for (size_t i = 0; i < pointsGood_.size(); ++i)

@ -46,13 +46,21 @@
#include "opencv2/videostab/ring_buffer.hpp" #include "opencv2/videostab/ring_buffer.hpp"
#ifdef HAVE_CLP #ifdef HAVE_CLP
#include "coin/ClpSimplex.hpp" #include "ClpSimplex.hpp"
#include "coin/ClpPresolve.hpp" #include "ClpPresolve.hpp"
#include "coin/ClpPrimalColumnSteepest.hpp" #include "ClpPrimalColumnSteepest.hpp"
#include "coin/ClpDualRowSteepest.hpp" #include "ClpDualRowSteepest.hpp"
#define INF 1e10
#endif #endif
#define INF 1e10 // Clp replaces min and max with ?: globally, we can't use std::min and std::max in case
// when HAVE_CLP is true, otherwise we create the defines by ourselves
#ifndef min
#define min(a,b) std::min(a,b)
#endif
#ifndef max
#define max(a,b) std::max(a,b)
#endif
using namespace std; using namespace std;
@ -62,8 +70,7 @@ namespace videostab
{ {
void MotionStabilizationPipeline::stabilize( void MotionStabilizationPipeline::stabilize(
int size, const vector<Mat> &motions, pair<int,int> range, int size, const vector<Mat> &motions, pair<int,int> range, Mat *stabilizationMotions)
Mat *stabilizationMotions)
{ {
vector<Mat> updatedMotions(motions.size()); vector<Mat> updatedMotions(motions.size());
for (size_t i = 0; i < motions.size(); ++i) for (size_t i = 0; i < motions.size(); ++i)
@ -118,8 +125,8 @@ Mat GaussianMotionFilter::stabilize(int idx, const vector<Mat> &motions, pair<in
const Mat &cur = at(idx, motions); const Mat &cur = at(idx, motions);
Mat res = Mat::zeros(cur.size(), cur.type()); Mat res = Mat::zeros(cur.size(), cur.type());
float sum = 0.f; float sum = 0.f;
int iMin = std::max(idx - radius_, range.first); int iMin = max(idx - radius_, range.first);
int iMax = std::min(idx + radius_, range.second); int iMax = min(idx + radius_, range.second);
for (int i = iMin; i <= iMax; ++i) for (int i = iMin; i <= iMax; ++i)
{ {
res += weight_[radius_ + i - idx] * getMotion(idx, i, motions); res += weight_[radius_ + i - idx] * getMotion(idx, i, motions);
@ -266,7 +273,7 @@ LpMotionStabilizer::LpMotionStabilizer(MotionModel model)
{ {
setMotionModel(model); setMotionModel(model);
setFrameSize(Size(0,0)); setFrameSize(Size(0,0));
setTrimRatio(0.1); setTrimRatio(0.1f);
setWeight1(1); setWeight1(1);
setWeight2(10); setWeight2(10);
setWeight3(100); setWeight3(100);
@ -284,8 +291,7 @@ void LpMotionStabilizer::stabilize(int, const vector<Mat>&, pair<int,int>, Mat*)
#else #else
void LpMotionStabilizer::stabilize( void LpMotionStabilizer::stabilize(
int size, const vector<Mat> &motions, pair<int,int> range, int size, const vector<Mat> &motions, pair<int,int> range, Mat *stabilizationMotions)
Mat *stabilizationMotions)
{ {
CV_Assert(model_ == MM_LINEAR_SIMILARITY); CV_Assert(model_ == MM_LINEAR_SIMILARITY);
@ -662,7 +668,7 @@ void LpMotionStabilizer::stabilize(
CoinPackedMatrix A(true, &rows_[0], &cols_[0], &elems_[0], elems_.size()); CoinPackedMatrix A(true, &rows_[0], &cols_[0], &elems_[0], elems_.size());
A.setDimensions(nrows, ncols); A.setDimensions(nrows, ncols);
ClpSimplex model; ClpSimplex model(false);
model.loadProblem(A, &collb_[0], &colub_[0], &obj_[0], &rowlb_[0], &rowub_[0]); model.loadProblem(A, &collb_[0], &colub_[0], &obj_[0], &rowlb_[0], &rowub_[0]);
ClpDualRowSteepest dualSteep(1); ClpDualRowSteepest dualSteep(1);

Loading…
Cancel
Save