From 13d087e62d1953134cc0bc6326fb1017dcf8ee52 Mon Sep 17 00:00:00 2001 From: Vladislav Vinogradov Date: Thu, 18 Apr 2013 11:30:27 +0400 Subject: [PATCH] videostab module fixes --- modules/videostab/CMakeLists.txt | 3 ++- .../include/opencv2/videostab/global_motion.hpp | 10 ++++++---- .../include/opencv2/videostab/optical_flow.hpp | 8 +++++--- .../include/opencv2/videostab/wobble_suppression.hpp | 5 +---- modules/videostab/src/global_motion.cpp | 10 ++++++++-- modules/videostab/src/inpainting.cpp | 2 +- modules/videostab/src/optical_flow.cpp | 6 ++++-- modules/videostab/src/wobble_suppression.cpp | 11 ++++++++++- samples/cpp/videostab.cpp | 4 ++-- 9 files changed, 39 insertions(+), 20 deletions(-) diff --git a/modules/videostab/CMakeLists.txt b/modules/videostab/CMakeLists.txt index edde3f86d..e9e62815f 100644 --- a/modules/videostab/CMakeLists.txt +++ b/modules/videostab/CMakeLists.txt @@ -1,3 +1,4 @@ set(the_description "Video stabilization") -ocv_define_module(videostab opencv_imgproc opencv_features2d opencv_video opencv_photo opencv_calib3d OPTIONAL opencv_gpu opencv_highgui) +ocv_define_module(videostab opencv_imgproc opencv_features2d opencv_video opencv_photo opencv_calib3d + OPTIONAL opencv_gpu opencv_gpuwarping opencv_gpuoptflow opencv_highgui) diff --git a/modules/videostab/include/opencv2/videostab/global_motion.hpp b/modules/videostab/include/opencv2/videostab/global_motion.hpp index 0f4a9cfa7..58b831b37 100644 --- a/modules/videostab/include/opencv2/videostab/global_motion.hpp +++ b/modules/videostab/include/opencv2/videostab/global_motion.hpp @@ -52,8 +52,8 @@ #include "opencv2/videostab/motion_core.hpp" #include "opencv2/videostab/outlier_rejection.hpp" -#ifdef HAVE_OPENCV_GPU - #include "opencv2/gpu.hpp" +#ifdef HAVE_OPENCV_GPUIMGPROC +# include "opencv2/gpuimgproc.hpp" #endif namespace cv @@ -199,7 +199,8 @@ private: std::vector pointsPrevGood_, pointsGood_; }; -#ifdef HAVE_OPENCV_GPU +#if defined(HAVE_OPENCV_GPUIMGPROC) && defined(HAVE_OPENCV_GPU) && defined(HAVE_OPENCV_GPUOPTFLOW) + class CV_EXPORTS KeypointBasedMotionEstimatorGpu : public ImageMotionEstimatorBase { public: @@ -228,7 +229,8 @@ private: std::vector hostPointsPrevTmp_, hostPointsTmp_; std::vector rejectionStatus_; }; -#endif + +#endif // defined(HAVE_OPENCV_GPUIMGPROC) && defined(HAVE_OPENCV_GPU) && defined(HAVE_OPENCV_GPUOPTFLOW) CV_EXPORTS Mat getMotion(int from, int to, const std::vector &motions); diff --git a/modules/videostab/include/opencv2/videostab/optical_flow.hpp b/modules/videostab/include/opencv2/videostab/optical_flow.hpp index 61f38fdb6..7509c1207 100644 --- a/modules/videostab/include/opencv2/videostab/optical_flow.hpp +++ b/modules/videostab/include/opencv2/videostab/optical_flow.hpp @@ -46,8 +46,8 @@ #include "opencv2/core.hpp" #include "opencv2/opencv_modules.hpp" -#ifdef HAVE_OPENCV_GPU - #include "opencv2/gpu.hpp" +#ifdef HAVE_OPENCV_GPUOPTFLOW + #include "opencv2/gpuoptflow.hpp" #endif namespace cv @@ -99,7 +99,8 @@ public: OutputArray status, OutputArray errors); }; -#ifdef HAVE_OPENCV_GPU +#ifdef HAVE_OPENCV_GPUOPTFLOW + class CV_EXPORTS SparsePyrLkOptFlowEstimatorGpu : public PyrLkOptFlowEstimatorBase, public ISparseOptFlowEstimator { @@ -135,6 +136,7 @@ private: gpu::PyrLKOpticalFlow optFlowEstimator_; gpu::GpuMat frame0_, frame1_, flowX_, flowY_, errors_; }; + #endif } // namespace videostab diff --git a/modules/videostab/include/opencv2/videostab/wobble_suppression.hpp b/modules/videostab/include/opencv2/videostab/wobble_suppression.hpp index f38de8504..987a19b1b 100644 --- a/modules/videostab/include/opencv2/videostab/wobble_suppression.hpp +++ b/modules/videostab/include/opencv2/videostab/wobble_suppression.hpp @@ -45,13 +45,10 @@ #include #include "opencv2/core.hpp" +#include "opencv2/core/gpumat.hpp" #include "opencv2/videostab/global_motion.hpp" #include "opencv2/videostab/log.hpp" -#ifdef HAVE_OPENCV_GPU - #include "opencv2/gpu.hpp" -#endif - namespace cv { namespace videostab diff --git a/modules/videostab/src/global_motion.cpp b/modules/videostab/src/global_motion.cpp index fd56e2b15..45e2d164e 100644 --- a/modules/videostab/src/global_motion.cpp +++ b/modules/videostab/src/global_motion.cpp @@ -47,6 +47,10 @@ #include "opencv2/opencv_modules.hpp" #include "clp.hpp" +#ifdef HAVE_OPENCV_GPU +# include "opencv2/gpu.hpp" +#endif + namespace cv { namespace videostab @@ -728,7 +732,8 @@ Mat KeypointBasedMotionEstimator::estimate(const Mat &frame0, const Mat &frame1, } -#ifdef HAVE_OPENCV_GPU +#if defined(HAVE_OPENCV_GPUIMGPROC) && defined(HAVE_OPENCV_GPU) && defined(HAVE_OPENCV_GPUOPTFLOW) + KeypointBasedMotionEstimatorGpu::KeypointBasedMotionEstimatorGpu(Ptr estimator) : ImageMotionEstimatorBase(estimator->motionModel()), motionEstimator_(estimator) { @@ -799,7 +804,8 @@ Mat KeypointBasedMotionEstimatorGpu::estimate(const gpu::GpuMat &frame0, const g // estimate motion return motionEstimator_->estimate(hostPointsPrev_, hostPoints_, ok); } -#endif // HAVE_OPENCV_GPU + +#endif // defined(HAVE_OPENCV_GPUIMGPROC) && defined(HAVE_OPENCV_GPU) && defined(HAVE_OPENCV_GPUOPTFLOW) Mat getMotion(int from, int to, const std::vector &motions) diff --git a/modules/videostab/src/inpainting.cpp b/modules/videostab/src/inpainting.cpp index ada8792f1..b3092048f 100644 --- a/modules/videostab/src/inpainting.cpp +++ b/modules/videostab/src/inpainting.cpp @@ -323,7 +323,7 @@ public: MotionInpainter::MotionInpainter() { -#ifdef HAVE_OPENCV_GPU +#ifdef HAVE_OPENCV_GPUOPTFLOW setOptFlowEstimator(new DensePyrLkOptFlowEstimatorGpu()); #else CV_Error(Error::StsNotImplemented, "Current implementation of MotionInpainter requires GPU"); diff --git a/modules/videostab/src/optical_flow.cpp b/modules/videostab/src/optical_flow.cpp index f5c8288e7..cee08823a 100644 --- a/modules/videostab/src/optical_flow.cpp +++ b/modules/videostab/src/optical_flow.cpp @@ -58,7 +58,8 @@ void SparsePyrLkOptFlowEstimator::run( } -#ifdef HAVE_OPENCV_GPU +#ifdef HAVE_OPENCV_GPUOPTFLOW + SparsePyrLkOptFlowEstimatorGpu::SparsePyrLkOptFlowEstimatorGpu() { CV_Assert(gpu::getCudaEnabledDeviceCount() > 0); @@ -133,7 +134,8 @@ void DensePyrLkOptFlowEstimatorGpu::run( flowX_.download(flowX.getMatRef()); flowY_.download(flowY.getMatRef()); } -#endif // HAVE_OPENCV_GPU + +#endif // HAVE_OPENCV_GPUOPTFLOW } // namespace videostab } // namespace cv diff --git a/modules/videostab/src/wobble_suppression.cpp b/modules/videostab/src/wobble_suppression.cpp index 3c48df58f..049bb81b3 100644 --- a/modules/videostab/src/wobble_suppression.cpp +++ b/modules/videostab/src/wobble_suppression.cpp @@ -44,6 +44,15 @@ #include "opencv2/videostab/wobble_suppression.hpp" #include "opencv2/videostab/ring_buffer.hpp" +#ifdef HAVE_OPENCV_GPUWARPING +# include "opencv2/gpuwarping.hpp" +#endif + +#ifdef HAVE_OPENCV_GPU +# include "opencv2/gpu.hpp" +#endif + + namespace cv { namespace videostab @@ -113,7 +122,7 @@ void MoreAccurateMotionWobbleSuppressor::suppress(int idx, const Mat &frame, Mat } -#ifdef HAVE_OPENCV_GPU +#ifdef HAVE_OPENCV_GPUWARPING void MoreAccurateMotionWobbleSuppressorGpu::suppress(int idx, const gpu::GpuMat &frame, gpu::GpuMat &result) { CV_Assert(motions_ && stabilizationMotions_); diff --git a/samples/cpp/videostab.cpp b/samples/cpp/videostab.cpp index 686b3636f..21606d495 100644 --- a/samples/cpp/videostab.cpp +++ b/samples/cpp/videostab.cpp @@ -216,7 +216,7 @@ public: outlierRejector = tblor; } -#ifdef HAVE_OPENCV_GPU +#if defined(HAVE_OPENCV_GPUIMGPROC) && defined(HAVE_OPENCV_GPU) && defined(HAVE_OPENCV_GPUOPTFLOW) if (gpu) { KeypointBasedMotionEstimatorGpu *kbest = new KeypointBasedMotionEstimatorGpu(est); @@ -257,7 +257,7 @@ public: outlierRejector = tblor; } -#ifdef HAVE_OPENCV_GPU +#if defined(HAVE_OPENCV_GPUIMGPROC) && defined(HAVE_OPENCV_GPU) && defined(HAVE_OPENCV_GPUOPTFLOW) if (gpu) { KeypointBasedMotionEstimatorGpu *kbest = new KeypointBasedMotionEstimatorGpu(est);