set(the_description "Video stabilization")
-ocv_define_module(videostab opencv_imgproc opencv_features2d opencv_video OPTIONAL opencv_gpu)
+ocv_define_module(videostab opencv_imgproc opencv_features2d opencv_video opencv_highgui OPTIONAL opencv_gpu)
float dist;
int x, y;
- DXY() {}
+ DXY() : dist(0), x(0), y(0) {}
DXY(float dist, int x, int y) : dist(dist), x(x), y(y) {}
bool operator <(const DXY &dxy) const { return dist < dxy.dist; }
};
#define __OPENCV_VIDEOSTAB_OPTICAL_FLOW_HPP__
#include "opencv2/core/core.hpp"
-#include "opencv2/gpu/gpu.hpp"
+#include "opencv2/opencv_modules.hpp"
+
+#if HAVE_OPENCV_GPU
+# include "opencv2/gpu/gpu.hpp"
+#endif
namespace cv
{
OutputArray status, OutputArray errors);
};
+#if HAVE_OPENCV_GPU
class DensePyrLkOptFlowEstimatorGpu
: public PyrLkOptFlowEstimatorBase, public IDenseOptFlowEstimator
{
gpu::PyrLKOpticalFlow optFlowEstimator_;
gpu::GpuMat frame0_, frame1_, flowX_, flowY_, errors_;
};
+#endif
} // namespace videostab
} // namespace cv
MotionInpainter::MotionInpainter()
{
+#if HAVE_OPENCV_GPU
setOptFlowEstimator(new DensePyrLkOptFlowEstimatorGpu());
+#else
+ CV_Error( CV_StsNotImplemented, "Current implementation of MotionInpainter requires GPU" );
+#endif
setFlowErrorThreshold(1e-4f);
setBorderMode(BORDER_REPLICATE);
}
//M*/
#include "precomp.hpp"
-#include "opencv2/gpu/gpu.hpp"
#include "opencv2/video/video.hpp"
#include "opencv2/videostab/optical_flow.hpp"
}
+#if HAVE_OPENCV_GPU
DensePyrLkOptFlowEstimatorGpu::DensePyrLkOptFlowEstimatorGpu()
{
CV_Assert(gpu::getCudaEnabledDeviceCount() > 0);
flowX_.download(flowX.getMatRef());
flowY_.download(flowY.getMatRef());
}
+#endif
} // namespace videostab