From b416e8715d923e6a792afd7c0ebe683f931079b2 Mon Sep 17 00:00:00 2001 From: Vladislav Vinogradov Date: Thu, 15 Jan 2015 11:18:46 +0300 Subject: [PATCH 1/8] move labeling routines from cuda to cudalegacy --- modules/cuda/include/opencv2/cuda.hpp | 23 ------------------ .../cudalegacy/include/opencv2/cudalegacy.hpp | 24 +++++++++++++++++++ .../perf/perf_labeling.cpp | 0 .../src/cuda/ccomponetns.cu | 0 .../{cuda => cudalegacy}/src/graphcuts.cpp | 0 .../test/test_labeling.cpp | 0 modules/stitching/CMakeLists.txt | 2 +- .../opencv2/stitching/detail/seam_finders.hpp | 2 +- modules/stitching/src/precomp.hpp | 4 ++-- modules/stitching/src/seam_finders.cpp | 2 +- 10 files changed, 29 insertions(+), 28 deletions(-) rename modules/{cuda => cudalegacy}/perf/perf_labeling.cpp (100%) rename modules/{cuda => cudalegacy}/src/cuda/ccomponetns.cu (100%) rename modules/{cuda => cudalegacy}/src/graphcuts.cpp (100%) rename modules/{cuda => cudalegacy}/test/test_labeling.cpp (100%) diff --git a/modules/cuda/include/opencv2/cuda.hpp b/modules/cuda/include/opencv2/cuda.hpp index c6004296b..b8f2ed715 100644 --- a/modules/cuda/include/opencv2/cuda.hpp +++ b/modules/cuda/include/opencv2/cuda.hpp @@ -58,29 +58,6 @@ namespace cv { namespace cuda { -//////////////////////////// Labeling //////////////////////////// - -//! @addtogroup cuda -//! @{ - -//!performs labeling via graph cuts of a 2D regular 4-connected graph. -CV_EXPORTS void graphcut(GpuMat& terminals, GpuMat& leftTransp, GpuMat& rightTransp, GpuMat& top, GpuMat& bottom, GpuMat& labels, - GpuMat& buf, Stream& stream = Stream::Null()); - -//!performs labeling via graph cuts of a 2D regular 8-connected graph. -CV_EXPORTS void graphcut(GpuMat& terminals, GpuMat& leftTransp, GpuMat& rightTransp, GpuMat& top, GpuMat& topLeft, GpuMat& topRight, - GpuMat& bottom, GpuMat& bottomLeft, GpuMat& bottomRight, - GpuMat& labels, - GpuMat& buf, Stream& stream = Stream::Null()); - -//! compute mask for Generalized Flood fill componetns labeling. -CV_EXPORTS void connectivityMask(const GpuMat& image, GpuMat& mask, const cv::Scalar& lo, const cv::Scalar& hi, Stream& stream = Stream::Null()); - -//! performs connected componnents labeling. -CV_EXPORTS void labelComponents(const GpuMat& mask, GpuMat& components, int flags = 0, Stream& stream = Stream::Null()); - -//! @} - //////////////////////////// Calib3d //////////////////////////// //! @addtogroup cuda_calib3d diff --git a/modules/cudalegacy/include/opencv2/cudalegacy.hpp b/modules/cudalegacy/include/opencv2/cudalegacy.hpp index f0107499d..18f55eba7 100644 --- a/modules/cudalegacy/include/opencv2/cudalegacy.hpp +++ b/modules/cudalegacy/include/opencv2/cudalegacy.hpp @@ -63,6 +63,10 @@ namespace cv { namespace cuda { //! @addtogroup cudalegacy //! @{ +// +// ImagePyramid +// + class CV_EXPORTS ImagePyramid : public Algorithm { public: @@ -227,6 +231,26 @@ CV_EXPORTS void interpolateFrames(const GpuMat& frame0, const GpuMat& frame1, CV_EXPORTS void createOpticalFlowNeedleMap(const GpuMat& u, const GpuMat& v, GpuMat& vertex, GpuMat& colors); +// +// Labeling +// + +//!performs labeling via graph cuts of a 2D regular 4-connected graph. +CV_EXPORTS void graphcut(GpuMat& terminals, GpuMat& leftTransp, GpuMat& rightTransp, GpuMat& top, GpuMat& bottom, GpuMat& labels, + GpuMat& buf, Stream& stream = Stream::Null()); + +//!performs labeling via graph cuts of a 2D regular 8-connected graph. +CV_EXPORTS void graphcut(GpuMat& terminals, GpuMat& leftTransp, GpuMat& rightTransp, GpuMat& top, GpuMat& topLeft, GpuMat& topRight, + GpuMat& bottom, GpuMat& bottomLeft, GpuMat& bottomRight, + GpuMat& labels, + GpuMat& buf, Stream& stream = Stream::Null()); + +//! compute mask for Generalized Flood fill componetns labeling. +CV_EXPORTS void connectivityMask(const GpuMat& image, GpuMat& mask, const cv::Scalar& lo, const cv::Scalar& hi, Stream& stream = Stream::Null()); + +//! performs connected componnents labeling. +CV_EXPORTS void labelComponents(const GpuMat& mask, GpuMat& components, int flags = 0, Stream& stream = Stream::Null()); + //! @} }} diff --git a/modules/cuda/perf/perf_labeling.cpp b/modules/cudalegacy/perf/perf_labeling.cpp similarity index 100% rename from modules/cuda/perf/perf_labeling.cpp rename to modules/cudalegacy/perf/perf_labeling.cpp diff --git a/modules/cuda/src/cuda/ccomponetns.cu b/modules/cudalegacy/src/cuda/ccomponetns.cu similarity index 100% rename from modules/cuda/src/cuda/ccomponetns.cu rename to modules/cudalegacy/src/cuda/ccomponetns.cu diff --git a/modules/cuda/src/graphcuts.cpp b/modules/cudalegacy/src/graphcuts.cpp similarity index 100% rename from modules/cuda/src/graphcuts.cpp rename to modules/cudalegacy/src/graphcuts.cpp diff --git a/modules/cuda/test/test_labeling.cpp b/modules/cudalegacy/test/test_labeling.cpp similarity index 100% rename from modules/cuda/test/test_labeling.cpp rename to modules/cudalegacy/test/test_labeling.cpp diff --git a/modules/stitching/CMakeLists.txt b/modules/stitching/CMakeLists.txt index 36d4452c7..827675405 100644 --- a/modules/stitching/CMakeLists.txt +++ b/modules/stitching/CMakeLists.txt @@ -5,4 +5,4 @@ if(HAVE_CUDA) endif() ocv_define_module(stitching opencv_imgproc opencv_features2d opencv_calib3d opencv_objdetect - OPTIONAL opencv_cuda opencv_cudaarithm opencv_cudafilters opencv_cudafeatures2d opencv_xfeatures2d) + OPTIONAL opencv_cuda opencv_cudaarithm opencv_cudafilters opencv_cudafeatures2d opencv_cudalegacy opencv_xfeatures2d) diff --git a/modules/stitching/include/opencv2/stitching/detail/seam_finders.hpp b/modules/stitching/include/opencv2/stitching/detail/seam_finders.hpp index e4f7816bb..37029215e 100644 --- a/modules/stitching/include/opencv2/stitching/detail/seam_finders.hpp +++ b/modules/stitching/include/opencv2/stitching/detail/seam_finders.hpp @@ -249,7 +249,7 @@ private: }; -#ifdef HAVE_OPENCV_CUDA +#ifdef HAVE_OPENCV_CUDALEGACY class CV_EXPORTS GraphCutSeamFinderGpu : public GraphCutSeamFinderBase, public PairwiseSeamFinder { public: diff --git a/modules/stitching/src/precomp.hpp b/modules/stitching/src/precomp.hpp index c70d9f9a4..70636b684 100644 --- a/modules/stitching/src/precomp.hpp +++ b/modules/stitching/src/precomp.hpp @@ -83,8 +83,8 @@ # include "opencv2/cudafeatures2d.hpp" #endif -#ifdef HAVE_OPENCV_CUDA -# include "opencv2/cuda.hpp" +#ifdef HAVE_OPENCV_CUDALEGACY +# include "opencv2/cudalegacy.hpp" #endif #ifdef HAVE_OPENCV_XFEATURES2D diff --git a/modules/stitching/src/seam_finders.cpp b/modules/stitching/src/seam_finders.cpp index 4d5c8d163..8a673ede0 100644 --- a/modules/stitching/src/seam_finders.cpp +++ b/modules/stitching/src/seam_finders.cpp @@ -1321,7 +1321,7 @@ void GraphCutSeamFinder::find(const std::vector &src, const std::vector &src, const std::vector &corners, std::vector &masks) { From f1e17853861a151ca3c0ab96be1e6e21af550b70 Mon Sep 17 00:00:00 2001 From: Vladislav Vinogradov Date: Thu, 15 Jan 2015 14:28:49 +0300 Subject: [PATCH 2/8] move vstab related CUDA routines to vstab module --- modules/cuda/include/opencv2/cuda.hpp | 14 --- modules/cuda/src/global_motion.cpp | 96 ------------------- modules/cuda/test/test_global_motion.cpp | 90 ----------------- modules/videostab/CMakeLists.txt | 7 +- .../src/cuda/global_motion.cu | 0 modules/videostab/src/global_motion.cpp | 33 ++++++- modules/videostab/src/wobble_suppression.cpp | 37 ++++++- 7 files changed, 67 insertions(+), 210 deletions(-) delete mode 100644 modules/cuda/src/global_motion.cpp delete mode 100644 modules/cuda/test/test_global_motion.cpp rename modules/{cuda => videostab}/src/cuda/global_motion.cu (100%) diff --git a/modules/cuda/include/opencv2/cuda.hpp b/modules/cuda/include/opencv2/cuda.hpp index b8f2ed715..1a5d17d46 100644 --- a/modules/cuda/include/opencv2/cuda.hpp +++ b/modules/cuda/include/opencv2/cuda.hpp @@ -93,20 +93,6 @@ CV_EXPORTS void solvePnPRansac(const Mat& object, const Mat& image, const Mat& c //! @} -//////////////////////////// VStab //////////////////////////// - -//! @addtogroup cuda -//! @{ - -//! removes points (CV_32FC2, single row matrix) with zero mask value -CV_EXPORTS void compactPoints(GpuMat &points0, GpuMat &points1, const GpuMat &mask); - -CV_EXPORTS void calcWobbleSuppressionMaps( - int left, int idx, int right, Size size, const Mat &ml, const Mat &mr, - GpuMat &mapx, GpuMat &mapy); - -//! @} - }} // namespace cv { namespace cuda { #endif /* __OPENCV_CUDA_HPP__ */ diff --git a/modules/cuda/src/global_motion.cpp b/modules/cuda/src/global_motion.cpp deleted file mode 100644 index 4f847c924..000000000 --- a/modules/cuda/src/global_motion.cpp +++ /dev/null @@ -1,96 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -// Copyright (C) 2009, Willow Garage Inc., all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of the copyright holders may not be used to endorse or promote products -// derived from this software without specific prior written permission. -// -// This software is provided by the copyright holders and contributors "as is" and -// any express or implied warranties, including, but not limited to, the implied -// warranties of merchantability and fitness for a particular purpose are disclaimed. -// In no event shall the Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#include "precomp.hpp" - -using namespace cv; -using namespace cv::cuda; - -#if !defined HAVE_CUDA || defined(CUDA_DISABLER) - -void cv::cuda::compactPoints(GpuMat&, GpuMat&, const GpuMat&) { throw_no_cuda(); } -void cv::cuda::calcWobbleSuppressionMaps( - int, int, int, Size, const Mat&, const Mat&, GpuMat&, GpuMat&) { throw_no_cuda(); } - -#else - -namespace cv { namespace cuda { namespace device { namespace globmotion { - - int compactPoints(int N, float *points0, float *points1, const uchar *mask); - - void calcWobbleSuppressionMaps( - int left, int idx, int right, int width, int height, - const float *ml, const float *mr, PtrStepSzf mapx, PtrStepSzf mapy); - -}}}} - -void cv::cuda::compactPoints(GpuMat &points0, GpuMat &points1, const GpuMat &mask) -{ - CV_Assert(points0.rows == 1 && points1.rows == 1 && mask.rows == 1); - CV_Assert(points0.type() == CV_32FC2 && points1.type() == CV_32FC2 && mask.type() == CV_8U); - CV_Assert(points0.cols == mask.cols && points1.cols == mask.cols); - - int npoints = points0.cols; - int remaining = cv::cuda::device::globmotion::compactPoints( - npoints, (float*)points0.data, (float*)points1.data, mask.data); - - points0 = points0.colRange(0, remaining); - points1 = points1.colRange(0, remaining); -} - - -void cv::cuda::calcWobbleSuppressionMaps( - int left, int idx, int right, Size size, const Mat &ml, const Mat &mr, - GpuMat &mapx, GpuMat &mapy) -{ - CV_Assert(ml.size() == Size(3, 3) && ml.type() == CV_32F && ml.isContinuous()); - CV_Assert(mr.size() == Size(3, 3) && mr.type() == CV_32F && mr.isContinuous()); - - mapx.create(size, CV_32F); - mapy.create(size, CV_32F); - - cv::cuda::device::globmotion::calcWobbleSuppressionMaps( - left, idx, right, size.width, size.height, - ml.ptr(), mr.ptr(), mapx, mapy); -} - -#endif diff --git a/modules/cuda/test/test_global_motion.cpp b/modules/cuda/test/test_global_motion.cpp deleted file mode 100644 index 633fe647c..000000000 --- a/modules/cuda/test/test_global_motion.cpp +++ /dev/null @@ -1,90 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -// Copyright (C) 2009, Willow Garage Inc., all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of the copyright holders may not be used to endorse or promote products -// derived from this software without specific prior written permission. -// -// This software is provided by the copyright holders and contributors "as is" and -// any express or implied warranties, including, but not limited to, the implied -// warranties of merchantability and fitness for a particular purpose are disclaimed. -// In no event shall the Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#include "test_precomp.hpp" - -#ifdef HAVE_CUDA - -using namespace std; -using namespace cv; - -struct CompactPoints : testing::TestWithParam -{ - virtual void SetUp() { cuda::setDevice(GetParam().deviceID()); } -}; - -CUDA_TEST_P(CompactPoints, CanCompactizeSmallInput) -{ - Mat src0(1, 3, CV_32FC2); - src0.at(0,0) = Point2f(0,0); - src0.at(0,1) = Point2f(0,1); - src0.at(0,2) = Point2f(0,2); - - Mat src1(1, 3, CV_32FC2); - src1.at(0,0) = Point2f(1,0); - src1.at(0,1) = Point2f(1,1); - src1.at(0,2) = Point2f(1,2); - - Mat mask(1, 3, CV_8U); - mask.at(0,0) = 1; - mask.at(0,1) = 0; - mask.at(0,2) = 1; - - cuda::GpuMat dsrc0(src0), dsrc1(src1), dmask(mask); - cuda::compactPoints(dsrc0, dsrc1, dmask); - - dsrc0.download(src0); - dsrc1.download(src1); - - ASSERT_EQ(2, src0.cols); - ASSERT_EQ(2, src1.cols); - - ASSERT_TRUE(src0.at(0,0) == Point2f(0,0)); - ASSERT_TRUE(src0.at(0,1) == Point2f(0,2)); - - ASSERT_TRUE(src1.at(0,0) == Point2f(1,0)); - ASSERT_TRUE(src1.at(0,1) == Point2f(1,2)); -} - -INSTANTIATE_TEST_CASE_P(CUDA_GlobalMotion, CompactPoints, ALL_DEVICES); - -#endif // HAVE_CUDA diff --git a/modules/videostab/CMakeLists.txt b/modules/videostab/CMakeLists.txt index e252bdbf5..f57a5d215 100644 --- a/modules/videostab/CMakeLists.txt +++ b/modules/videostab/CMakeLists.txt @@ -1,3 +1,8 @@ set(the_description "Video stabilization") + +if(HAVE_CUDA) + ocv_warnings_disable(CMAKE_CXX_FLAGS -Wundef -Wmissing-declarations -Wshadow -Wunused-parameter) +endif() + ocv_define_module(videostab opencv_imgproc opencv_features2d opencv_video opencv_photo opencv_calib3d - OPTIONAL opencv_cuda opencv_cudawarping opencv_cudaoptflow opencv_videoio) + OPTIONAL opencv_cudawarping opencv_cudaoptflow opencv_videoio) diff --git a/modules/cuda/src/cuda/global_motion.cu b/modules/videostab/src/cuda/global_motion.cu similarity index 100% rename from modules/cuda/src/cuda/global_motion.cu rename to modules/videostab/src/cuda/global_motion.cu diff --git a/modules/videostab/src/global_motion.cpp b/modules/videostab/src/global_motion.cpp index 4875bef23..27e2bc3f4 100644 --- a/modules/videostab/src/global_motion.cpp +++ b/modules/videostab/src/global_motion.cpp @@ -47,8 +47,34 @@ #include "opencv2/opencv_modules.hpp" #include "clp.hpp" -#ifdef HAVE_OPENCV_CUDA -# include "opencv2/cuda.hpp" +#if !defined HAVE_CUDA || defined(CUDA_DISABLER) + +namespace cv { namespace cuda { + static void compactPoints(GpuMat&, GpuMat&, const GpuMat&) { throw_no_cuda(); } +}} + +#else + +namespace cv { namespace cuda { namespace device { namespace globmotion { + int compactPoints(int N, float *points0, float *points1, const uchar *mask); +}}}} + +namespace cv { namespace cuda { + static void compactPoints(GpuMat &points0, GpuMat &points1, const GpuMat &mask) + { + CV_Assert(points0.rows == 1 && points1.rows == 1 && mask.rows == 1); + CV_Assert(points0.type() == CV_32FC2 && points1.type() == CV_32FC2 && mask.type() == CV_8U); + CV_Assert(points0.cols == mask.cols && points1.cols == mask.cols); + + int npoints = points0.cols; + int remaining = cv::cuda::device::globmotion::compactPoints( + npoints, (float*)points0.data, (float*)points1.data, mask.data); + + points0 = points0.colRange(0, remaining); + points1 = points1.colRange(0, remaining); + } +}} + #endif namespace cv @@ -736,8 +762,7 @@ Mat KeypointBasedMotionEstimator::estimate(const Mat &frame0, const Mat &frame1, return motionEstimator_->estimate(pointsPrevGood_, pointsGood_, ok); } - -#if defined(HAVE_OPENCV_CUDAIMGPROC) && defined(HAVE_OPENCV_CUDA) && defined(HAVE_OPENCV_CUDAOPTFLOW) +#if defined(HAVE_OPENCV_CUDAIMGPROC) && defined(HAVE_OPENCV_CUDAOPTFLOW) KeypointBasedMotionEstimatorGpu::KeypointBasedMotionEstimatorGpu(Ptr estimator) : ImageMotionEstimatorBase(estimator->motionModel()), motionEstimator_(estimator) diff --git a/modules/videostab/src/wobble_suppression.cpp b/modules/videostab/src/wobble_suppression.cpp index e2635d5e0..d05fd05cc 100644 --- a/modules/videostab/src/wobble_suppression.cpp +++ b/modules/videostab/src/wobble_suppression.cpp @@ -48,10 +48,38 @@ # include "opencv2/cudawarping.hpp" #endif -#ifdef HAVE_OPENCV_CUDA -# include "opencv2/cuda.hpp" -#endif +#if !defined HAVE_CUDA || defined(CUDA_DISABLER) +namespace cv { namespace cuda { + static void calcWobbleSuppressionMaps(int, int, int, Size, const Mat&, const Mat&, GpuMat&, GpuMat&) { throw_no_cuda(); } +}} + +#else + +namespace cv { namespace cuda { namespace device { namespace globmotion { + void calcWobbleSuppressionMaps( + int left, int idx, int right, int width, int height, + const float *ml, const float *mr, PtrStepSzf mapx, PtrStepSzf mapy); +}}}} + +namespace cv { namespace cuda { + static void calcWobbleSuppressionMaps( + int left, int idx, int right, Size size, const Mat &ml, const Mat &mr, + GpuMat &mapx, GpuMat &mapy) + { + CV_Assert(ml.size() == Size(3, 3) && ml.type() == CV_32F && ml.isContinuous()); + CV_Assert(mr.size() == Size(3, 3) && mr.type() == CV_32F && mr.isContinuous()); + + mapx.create(size, CV_32F); + mapy.create(size, CV_32F); + + cv::cuda::device::globmotion::calcWobbleSuppressionMaps( + left, idx, right, size.width, size.height, + ml.ptr(), mr.ptr(), mapx, mapy); + } +}} + +#endif namespace cv { @@ -121,8 +149,7 @@ void MoreAccurateMotionWobbleSuppressor::suppress(int idx, const Mat &frame, Mat remap(frame, result, mapx_, mapy_, INTER_LINEAR, BORDER_REPLICATE); } - -#if defined(HAVE_OPENCV_CUDA) && defined(HAVE_OPENCV_CUDAWARPING) +#if defined(HAVE_OPENCV_CUDAWARPING) void MoreAccurateMotionWobbleSuppressorGpu::suppress(int idx, const cuda::GpuMat &frame, cuda::GpuMat &result) { CV_Assert(motions_ && stabilizationMotions_); From ce0e595a4f6b674d0d7898e80bba28e81f5f009b Mon Sep 17 00:00:00 2001 From: Vladislav Vinogradov Date: Thu, 15 Jan 2015 16:09:53 +0300 Subject: [PATCH 3/8] move the rest cuda functions to cuda legacy --- modules/cuda/include/opencv2/cuda.hpp | 28 ---------------- modules/cudalegacy/CMakeLists.txt | 3 +- .../cudalegacy/include/opencv2/cudalegacy.hpp | 32 +++++++++++++++++++ .../perf/perf_calib3d.cpp | 6 ++++ modules/{cuda => cudalegacy}/src/calib3d.cpp | 2 +- .../{cuda => cudalegacy}/src/cuda/calib3d.cu | 0 modules/cudalegacy/src/precomp.hpp | 4 +++ .../test/test_calib3d.cpp | 4 ++- modules/cudalegacy/test/test_precomp.hpp | 2 ++ samples/gpu/performance/tests.cpp | 2 +- 10 files changed, 51 insertions(+), 32 deletions(-) rename modules/{cuda => cudalegacy}/perf/perf_calib3d.cpp (98%) rename modules/{cuda => cudalegacy}/src/calib3d.cpp (99%) rename modules/{cuda => cudalegacy}/src/cuda/calib3d.cu (100%) rename modules/{cuda => cudalegacy}/test/test_calib3d.cpp (98%) diff --git a/modules/cuda/include/opencv2/cuda.hpp b/modules/cuda/include/opencv2/cuda.hpp index 1a5d17d46..40483f485 100644 --- a/modules/cuda/include/opencv2/cuda.hpp +++ b/modules/cuda/include/opencv2/cuda.hpp @@ -63,34 +63,6 @@ namespace cv { namespace cuda { //! @addtogroup cuda_calib3d //! @{ -CV_EXPORTS void transformPoints(const GpuMat& src, const Mat& rvec, const Mat& tvec, - GpuMat& dst, Stream& stream = Stream::Null()); - -CV_EXPORTS void projectPoints(const GpuMat& src, const Mat& rvec, const Mat& tvec, - const Mat& camera_mat, const Mat& dist_coef, GpuMat& dst, - Stream& stream = Stream::Null()); - -/** @brief Finds the object pose from 3D-2D point correspondences. - -@param object Single-row matrix of object points. -@param image Single-row matrix of image points. -@param camera_mat 3x3 matrix of intrinsic camera parameters. -@param dist_coef Distortion coefficients. See undistortPoints for details. -@param rvec Output 3D rotation vector. -@param tvec Output 3D translation vector. -@param use_extrinsic_guess Flag to indicate that the function must use rvec and tvec as an -initial transformation guess. It is not supported for now. -@param num_iters Maximum number of RANSAC iterations. -@param max_dist Euclidean distance threshold to detect whether point is inlier or not. -@param min_inlier_count Flag to indicate that the function must stop if greater or equal number -of inliers is achieved. It is not supported for now. -@param inliers Output vector of inlier indices. - */ -CV_EXPORTS void solvePnPRansac(const Mat& object, const Mat& image, const Mat& camera_mat, - const Mat& dist_coef, Mat& rvec, Mat& tvec, bool use_extrinsic_guess=false, - int num_iters=100, float max_dist=8.0, int min_inlier_count=100, - std::vector* inliers=NULL); - //! @} }} // namespace cv { namespace cuda { diff --git a/modules/cudalegacy/CMakeLists.txt b/modules/cudalegacy/CMakeLists.txt index 0ef6e359b..7fe342e11 100644 --- a/modules/cudalegacy/CMakeLists.txt +++ b/modules/cudalegacy/CMakeLists.txt @@ -6,4 +6,5 @@ set(the_description "CUDA-accelerated Computer Vision (legacy)") ocv_warnings_disable(CMAKE_CXX_FLAGS /wd4127 /wd4130 /wd4324 /wd4512 /wd4310 -Wundef -Wmissing-declarations -Wuninitialized -Wshadow) -ocv_define_module(cudalegacy opencv_core opencv_video OPTIONAL opencv_objdetect opencv_imgproc opencv_cudaarithm opencv_cudafilters opencv_cudaimgproc) +ocv_define_module(cudalegacy opencv_core opencv_video + OPTIONAL opencv_objdetect opencv_imgproc opencv_calib3d opencv_cudaarithm opencv_cudafilters opencv_cudaimgproc) diff --git a/modules/cudalegacy/include/opencv2/cudalegacy.hpp b/modules/cudalegacy/include/opencv2/cudalegacy.hpp index 18f55eba7..c27a1161f 100644 --- a/modules/cudalegacy/include/opencv2/cudalegacy.hpp +++ b/modules/cudalegacy/include/opencv2/cudalegacy.hpp @@ -251,6 +251,38 @@ CV_EXPORTS void connectivityMask(const GpuMat& image, GpuMat& mask, const cv::Sc //! performs connected componnents labeling. CV_EXPORTS void labelComponents(const GpuMat& mask, GpuMat& components, int flags = 0, Stream& stream = Stream::Null()); +// +// Calib3d +// + +CV_EXPORTS void transformPoints(const GpuMat& src, const Mat& rvec, const Mat& tvec, + GpuMat& dst, Stream& stream = Stream::Null()); + +CV_EXPORTS void projectPoints(const GpuMat& src, const Mat& rvec, const Mat& tvec, + const Mat& camera_mat, const Mat& dist_coef, GpuMat& dst, + Stream& stream = Stream::Null()); + +/** @brief Finds the object pose from 3D-2D point correspondences. + +@param object Single-row matrix of object points. +@param image Single-row matrix of image points. +@param camera_mat 3x3 matrix of intrinsic camera parameters. +@param dist_coef Distortion coefficients. See undistortPoints for details. +@param rvec Output 3D rotation vector. +@param tvec Output 3D translation vector. +@param use_extrinsic_guess Flag to indicate that the function must use rvec and tvec as an +initial transformation guess. It is not supported for now. +@param num_iters Maximum number of RANSAC iterations. +@param max_dist Euclidean distance threshold to detect whether point is inlier or not. +@param min_inlier_count Flag to indicate that the function must stop if greater or equal number +of inliers is achieved. It is not supported for now. +@param inliers Output vector of inlier indices. + */ +CV_EXPORTS void solvePnPRansac(const Mat& object, const Mat& image, const Mat& camera_mat, + const Mat& dist_coef, Mat& rvec, Mat& tvec, bool use_extrinsic_guess=false, + int num_iters=100, float max_dist=8.0, int min_inlier_count=100, + std::vector* inliers=NULL); + //! @} }} diff --git a/modules/cuda/perf/perf_calib3d.cpp b/modules/cudalegacy/perf/perf_calib3d.cpp similarity index 98% rename from modules/cuda/perf/perf_calib3d.cpp rename to modules/cudalegacy/perf/perf_calib3d.cpp index 4148b5191..0e708ce4f 100644 --- a/modules/cuda/perf/perf_calib3d.cpp +++ b/modules/cudalegacy/perf/perf_calib3d.cpp @@ -42,6 +42,10 @@ #include "perf_precomp.hpp" +#ifdef HAVE_OPENCV_CALIB3D + +#include "opencv2/calib3d.hpp" + using namespace std; using namespace testing; using namespace perf; @@ -133,3 +137,5 @@ PERF_TEST_P(Count, Calib3D_SolvePnPRansac, CPU_SANITY_CHECK(tvec, 1e-6); } } + +#endif diff --git a/modules/cuda/src/calib3d.cpp b/modules/cudalegacy/src/calib3d.cpp similarity index 99% rename from modules/cuda/src/calib3d.cpp rename to modules/cudalegacy/src/calib3d.cpp index eaadb9343..7d8c816fa 100644 --- a/modules/cuda/src/calib3d.cpp +++ b/modules/cudalegacy/src/calib3d.cpp @@ -45,7 +45,7 @@ using namespace cv; using namespace cv::cuda; -#if !defined HAVE_CUDA || defined(CUDA_DISABLER) +#if !defined HAVE_CUDA || !defined HAVE_OPENCV_CALIB3D || defined(CUDA_DISABLER) void cv::cuda::transformPoints(const GpuMat&, const Mat&, const Mat&, GpuMat&, Stream&) { throw_no_cuda(); } diff --git a/modules/cuda/src/cuda/calib3d.cu b/modules/cudalegacy/src/cuda/calib3d.cu similarity index 100% rename from modules/cuda/src/cuda/calib3d.cu rename to modules/cudalegacy/src/cuda/calib3d.cu diff --git a/modules/cudalegacy/src/precomp.hpp b/modules/cudalegacy/src/precomp.hpp index a15e9f03c..9eda7e01d 100644 --- a/modules/cudalegacy/src/precomp.hpp +++ b/modules/cudalegacy/src/precomp.hpp @@ -56,6 +56,10 @@ # include "opencv2/objdetect.hpp" #endif +#ifdef HAVE_OPENCV_CALIB3D +# include "opencv2/calib3d.hpp" +#endif + #ifdef HAVE_OPENCV_CUDAARITHM # include "opencv2/cudaarithm.hpp" #endif diff --git a/modules/cuda/test/test_calib3d.cpp b/modules/cudalegacy/test/test_calib3d.cpp similarity index 98% rename from modules/cuda/test/test_calib3d.cpp rename to modules/cudalegacy/test/test_calib3d.cpp index 7208b10ba..7a73f817e 100644 --- a/modules/cuda/test/test_calib3d.cpp +++ b/modules/cudalegacy/test/test_calib3d.cpp @@ -42,7 +42,9 @@ #include "test_precomp.hpp" -#ifdef HAVE_CUDA +#if defined HAVE_CUDA && defined HAVE_OPENCV_CALIB3D + +#include "opencv2/calib3d.hpp" using namespace cvtest; diff --git a/modules/cudalegacy/test/test_precomp.hpp b/modules/cudalegacy/test/test_precomp.hpp index 5169ef2bb..727b40d83 100644 --- a/modules/cudalegacy/test/test_precomp.hpp +++ b/modules/cudalegacy/test/test_precomp.hpp @@ -74,6 +74,8 @@ #include "opencv2/core/private.cuda.hpp" +#include "opencv2/opencv_modules.hpp" + #include "cvconfig.h" #include "NCVTest.hpp" diff --git a/samples/gpu/performance/tests.cpp b/samples/gpu/performance/tests.cpp index 9e8bfd28c..b4bf4cfbe 100644 --- a/samples/gpu/performance/tests.cpp +++ b/samples/gpu/performance/tests.cpp @@ -3,7 +3,7 @@ #include "opencv2/highgui.hpp" #include "opencv2/calib3d.hpp" #include "opencv2/video.hpp" -#include "opencv2/cuda.hpp" +#include "opencv2/cudalegacy.hpp" #include "opencv2/cudaimgproc.hpp" #include "opencv2/cudaarithm.hpp" #include "opencv2/cudawarping.hpp" From 124ac15f1e7ce710677a89bbff842aa790c2de17 Mon Sep 17 00:00:00 2001 From: Vladislav Vinogradov Date: Thu, 15 Jan 2015 16:14:13 +0300 Subject: [PATCH 4/8] remove cuda module --- cmake/OpenCVModule.cmake | 2 +- modules/cuda/CMakeLists.txt | 9 -- modules/cuda/doc/introduction.markdown | 85 ------------------- modules/cuda/include/opencv2/cuda.hpp | 70 --------------- modules/cuda/perf/perf_main.cpp | 47 ---------- modules/cuda/perf/perf_precomp.hpp | 64 -------------- modules/cuda/src/precomp.hpp | 60 ------------- modules/cuda/test/test_main.cpp | 45 ---------- modules/cuda/test/test_precomp.hpp | 66 -------------- modules/stitching/CMakeLists.txt | 2 +- modules/stitching/src/stitcher.cpp | 4 +- .../opencv2/videostab/global_motion.hpp | 4 +- .../opencv2/videostab/wobble_suppression.hpp | 2 +- modules/videostab/src/global_motion.cpp | 2 +- samples/cpp/stitching_detailed.cpp | 4 +- samples/cpp/videostab.cpp | 8 +- samples/gpu/CMakeLists.txt | 2 +- samples/gpu/performance/performance.cpp | 1 + samples/gpu/performance/performance.h | 1 - 19 files changed, 15 insertions(+), 463 deletions(-) delete mode 100644 modules/cuda/CMakeLists.txt delete mode 100644 modules/cuda/doc/introduction.markdown delete mode 100644 modules/cuda/include/opencv2/cuda.hpp delete mode 100644 modules/cuda/perf/perf_main.cpp delete mode 100644 modules/cuda/perf/perf_precomp.hpp delete mode 100644 modules/cuda/src/precomp.hpp delete mode 100644 modules/cuda/test/test_main.cpp delete mode 100644 modules/cuda/test/test_precomp.hpp diff --git a/cmake/OpenCVModule.cmake b/cmake/OpenCVModule.cmake index 708578d8b..fa0291963 100644 --- a/cmake/OpenCVModule.cmake +++ b/cmake/OpenCVModule.cmake @@ -109,7 +109,7 @@ endmacro() # Usage: # ocv_add_module( [INTERNAL|BINDINGS] [REQUIRED] [] [OPTIONAL ]) # Example: -# ocv_add_module(yaom INTERNAL opencv_core opencv_highgui opencv_flann OPTIONAL opencv_cuda) +# ocv_add_module(yaom INTERNAL opencv_core opencv_highgui opencv_flann OPTIONAL opencv_cudev) macro(ocv_add_module _name) ocv_debug_message("ocv_add_module(" ${_name} ${ARGN} ")") string(TOLOWER "${_name}" name) diff --git a/modules/cuda/CMakeLists.txt b/modules/cuda/CMakeLists.txt deleted file mode 100644 index d668ea8b0..000000000 --- a/modules/cuda/CMakeLists.txt +++ /dev/null @@ -1,9 +0,0 @@ -if(IOS OR (NOT HAVE_CUDA AND NOT BUILD_CUDA_STUBS)) - ocv_module_disable(cuda) -endif() - -set(the_description "CUDA-accelerated Computer Vision") - -ocv_warnings_disable(CMAKE_CXX_FLAGS /wd4127 /wd4100 /wd4324 /wd4512 /wd4515 -Wundef -Wmissing-declarations -Wshadow -Wunused-parameter) - -ocv_define_module(cuda opencv_calib3d opencv_cudaarithm opencv_cudawarping OPTIONAL opencv_cudalegacy) diff --git a/modules/cuda/doc/introduction.markdown b/modules/cuda/doc/introduction.markdown deleted file mode 100644 index ebe8c21af..000000000 --- a/modules/cuda/doc/introduction.markdown +++ /dev/null @@ -1,85 +0,0 @@ -CUDA Module Introduction {#cuda_intro} -======================== - -General Information -------------------- - -The OpenCV CUDA module is a set of classes and functions to utilize CUDA computational capabilities. -It is implemented using NVIDIA\* CUDA\* Runtime API and supports only NVIDIA GPUs. The OpenCV CUDA -module includes utility functions, low-level vision primitives, and high-level algorithms. The -utility functions and low-level primitives provide a powerful infrastructure for developing fast -vision algorithms taking advantage of CUDA whereas the high-level functionality includes some -state-of-the-art algorithms (such as stereo correspondence, face and people detectors, and others) -ready to be used by the application developers. - -The CUDA module is designed as a host-level API. This means that if you have pre-compiled OpenCV -CUDA binaries, you are not required to have the CUDA Toolkit installed or write any extra code to -make use of the CUDA. - -The OpenCV CUDA module is designed for ease of use and does not require any knowledge of CUDA. -Though, such a knowledge will certainly be useful to handle non-trivial cases or achieve the highest -performance. It is helpful to understand the cost of various operations, what the GPU does, what the -preferred data formats are, and so on. The CUDA module is an effective instrument for quick -implementation of CUDA-accelerated computer vision algorithms. However, if your algorithm involves -many simple operations, then, for the best possible performance, you may still need to write your -own kernels to avoid extra write and read operations on the intermediate results. - -To enable CUDA support, configure OpenCV using CMake with WITH\_CUDA=ON . When the flag is set and -if CUDA is installed, the full-featured OpenCV CUDA module is built. Otherwise, the module is still -built but at runtime all functions from the module throw Exception with CV\_GpuNotSupported error -code, except for cuda::getCudaEnabledDeviceCount(). The latter function returns zero GPU count in -this case. Building OpenCV without CUDA support does not perform device code compilation, so it does -not require the CUDA Toolkit installed. Therefore, using the cuda::getCudaEnabledDeviceCount() -function, you can implement a high-level algorithm that will detect GPU presence at runtime and -choose an appropriate implementation (CPU or GPU) accordingly. - -Compilation for Different NVIDIA\* Platforms --------------------------------------------- - -NVIDIA\* compiler enables generating binary code (cubin and fatbin) and intermediate code (PTX). -Binary code often implies a specific GPU architecture and generation, so the compatibility with -other GPUs is not guaranteed. PTX is targeted for a virtual platform that is defined entirely by the -set of capabilities or features. Depending on the selected virtual platform, some of the -instructions are emulated or disabled, even if the real hardware supports all the features. - -At the first call, the PTX code is compiled to binary code for the particular GPU using a JIT -compiler. When the target GPU has a compute capability (CC) lower than the PTX code, JIT fails. By -default, the OpenCV CUDA module includes: - -\* - Binaries for compute capabilities 1.3 and 2.0 (controlled by CUDA\_ARCH\_BIN in CMake) - -\* - PTX code for compute capabilities 1.1 and 1.3 (controlled by CUDA\_ARCH\_PTX in CMake) - -This means that for devices with CC 1.3 and 2.0 binary images are ready to run. For all newer -platforms, the PTX code for 1.3 is JIT'ed to a binary image. For devices with CC 1.1 and 1.2, the -PTX for 1.1 is JIT'ed. For devices with CC 1.0, no code is available and the functions throw -Exception. For platforms where JIT compilation is performed first, the run is slow. - -On a GPU with CC 1.0, you can still compile the CUDA module and most of the functions will run -flawlessly. To achieve this, add "1.0" to the list of binaries, for example, -CUDA\_ARCH\_BIN="1.0 1.3 2.0" . The functions that cannot be run on CC 1.0 GPUs throw an exception. - -You can always determine at runtime whether the OpenCV GPU-built binaries (or PTX code) are -compatible with your GPU. The function cuda::DeviceInfo::isCompatible returns the compatibility -status (true/false). - -Utilizing Multiple GPUs ------------------------ - -In the current version, each of the OpenCV CUDA algorithms can use only a single GPU. So, to utilize -multiple GPUs, you have to manually distribute the work between GPUs. Switching active devie can be -done using cuda::setDevice() function. For more details please read Cuda C Programming Guide. - -While developing algorithms for multiple GPUs, note a data passing overhead. For primitive functions -and small images, it can be significant, which may eliminate all the advantages of having multiple -GPUs. But for high-level algorithms, consider using multi-GPU acceleration. For example, the Stereo -Block Matching algorithm has been successfully parallelized using the following algorithm: - -1. Split each image of the stereo pair into two horizontal overlapping stripes. -2. Process each pair of stripes (from the left and right images) on a separate Fermi\* GPU. -3. Merge the results into a single disparity map. - -With this algorithm, a dual GPU gave a 180% performance increase comparing to the single Fermi GPU. -For a source code example, see . diff --git a/modules/cuda/include/opencv2/cuda.hpp b/modules/cuda/include/opencv2/cuda.hpp deleted file mode 100644 index 40483f485..000000000 --- a/modules/cuda/include/opencv2/cuda.hpp +++ /dev/null @@ -1,70 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -// Copyright (C) 2009, Willow Garage Inc., all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of the copyright holders may not be used to endorse or promote products -// derived from this software without specific prior written permission. -// -// This software is provided by the copyright holders and contributors "as is" and -// any express or implied warranties, including, but not limited to, the implied -// warranties of merchantability and fitness for a particular purpose are disclaimed. -// In no event shall the Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#ifndef __OPENCV_CUDA_HPP__ -#define __OPENCV_CUDA_HPP__ - -#ifndef __cplusplus -# error cuda.hpp header must be compiled as C++ -#endif - -#include "opencv2/core/cuda.hpp" - -/** - @addtogroup cuda - @{ - @defgroup cuda_calib3d Camera Calibration and 3D Reconstruction - @} - */ - -namespace cv { namespace cuda { - -//////////////////////////// Calib3d //////////////////////////// - -//! @addtogroup cuda_calib3d -//! @{ - -//! @} - -}} // namespace cv { namespace cuda { - -#endif /* __OPENCV_CUDA_HPP__ */ diff --git a/modules/cuda/perf/perf_main.cpp b/modules/cuda/perf/perf_main.cpp deleted file mode 100644 index f01a2768d..000000000 --- a/modules/cuda/perf/perf_main.cpp +++ /dev/null @@ -1,47 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -// Copyright (C) 2009, Willow Garage Inc., all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of the copyright holders may not be used to endorse or promote products -// derived from this software without specific prior written permission. -// -// This software is provided by the copyright holders and contributors "as is" and -// any express or implied warranties, including, but not limited to, the implied -// warranties of merchantability and fitness for a particular purpose are disclaimed. -// In no event shall the Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#include "perf_precomp.hpp" - -using namespace perf; - -CV_PERF_TEST_CUDA_MAIN(cuda) diff --git a/modules/cuda/perf/perf_precomp.hpp b/modules/cuda/perf/perf_precomp.hpp deleted file mode 100644 index f810968cb..000000000 --- a/modules/cuda/perf/perf_precomp.hpp +++ /dev/null @@ -1,64 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -// Copyright (C) 2009, Willow Garage Inc., all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of the copyright holders may not be used to endorse or promote products -// derived from this software without specific prior written permission. -// -// This software is provided by the copyright holders and contributors "as is" and -// any express or implied warranties, including, but not limited to, the implied -// warranties of merchantability and fitness for a particular purpose are disclaimed. -// In no event shall the Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#ifdef __GNUC__ -# pragma GCC diagnostic ignored "-Wmissing-declarations" -# if defined __clang__ || defined __APPLE__ -# pragma GCC diagnostic ignored "-Wmissing-prototypes" -# pragma GCC diagnostic ignored "-Wextra" -# endif -#endif - -#ifndef __OPENCV_PERF_PRECOMP_HPP__ -#define __OPENCV_PERF_PRECOMP_HPP__ - -#include "opencv2/ts.hpp" -#include "opencv2/ts/cuda_perf.hpp" - -#include "opencv2/cuda.hpp" -#include "opencv2/calib3d.hpp" - -#ifdef GTEST_CREATE_SHARED_LIBRARY -#error no modules except ts should have GTEST_CREATE_SHARED_LIBRARY defined -#endif - -#endif diff --git a/modules/cuda/src/precomp.hpp b/modules/cuda/src/precomp.hpp deleted file mode 100644 index 7feeadddc..000000000 --- a/modules/cuda/src/precomp.hpp +++ /dev/null @@ -1,60 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -// Copyright (C) 2009, Willow Garage Inc., all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of the copyright holders may not be used to endorse or promote products -// derived from this software without specific prior written permission. -// -// This software is provided by the copyright holders and contributors "as is" and -// any express or implied warranties, including, but not limited to, the implied -// warranties of merchantability and fitness for a particular purpose are disclaimed. -// In no event shall the Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#ifndef __OPENCV_PRECOMP_H__ -#define __OPENCV_PRECOMP_H__ - -#include "opencv2/cuda.hpp" -#include "opencv2/cudaarithm.hpp" -#include "opencv2/cudawarping.hpp" -#include "opencv2/calib3d.hpp" - -#include "opencv2/core/private.cuda.hpp" -#include "opencv2/core/utility.hpp" - -#include "opencv2/opencv_modules.hpp" - -#ifdef HAVE_OPENCV_CUDALEGACY -# include "opencv2/cudalegacy/private.hpp" -#endif - -#endif /* __OPENCV_PRECOMP_H__ */ diff --git a/modules/cuda/test/test_main.cpp b/modules/cuda/test/test_main.cpp deleted file mode 100644 index 04f4fcf6e..000000000 --- a/modules/cuda/test/test_main.cpp +++ /dev/null @@ -1,45 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -// Copyright (C) 2009, Willow Garage Inc., all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of the copyright holders may not be used to endorse or promote products -// derived from this software without specific prior written permission. -// -// This software is provided by the copyright holders and contributors "as is" and -// any express or implied warranties, including, but not limited to, the implied -// warranties of merchantability and fitness for a particular purpose are disclaimed. -// In no event shall the Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#include "test_precomp.hpp" - -CV_CUDA_TEST_MAIN("gpu") diff --git a/modules/cuda/test/test_precomp.hpp b/modules/cuda/test/test_precomp.hpp deleted file mode 100644 index e3b33017a..000000000 --- a/modules/cuda/test/test_precomp.hpp +++ /dev/null @@ -1,66 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -// Copyright (C) 2009, Willow Garage Inc., all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of the copyright holders may not be used to endorse or promote products -// derived from this software without specific prior written permission. -// -// This software is provided by the copyright holders and contributors "as is" and -// any express or implied warranties, including, but not limited to, the implied -// warranties of merchantability and fitness for a particular purpose are disclaimed. -// In no event shall the Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#ifdef __GNUC__ -# pragma GCC diagnostic ignored "-Wmissing-declarations" -# if defined __clang__ || defined __APPLE__ -# pragma GCC diagnostic ignored "-Wmissing-prototypes" -# pragma GCC diagnostic ignored "-Wextra" -# endif -#endif - -#ifndef __OPENCV_TEST_PRECOMP_HPP__ -#define __OPENCV_TEST_PRECOMP_HPP__ - -#include - -#include "opencv2/ts.hpp" -#include "opencv2/ts/cuda_test.hpp" - -#include "opencv2/cuda.hpp" -#include "opencv2/core.hpp" -#include "opencv2/core/opengl.hpp" -#include "opencv2/calib3d.hpp" - -#include "cvconfig.h" - -#endif diff --git a/modules/stitching/CMakeLists.txt b/modules/stitching/CMakeLists.txt index 827675405..8650f7280 100644 --- a/modules/stitching/CMakeLists.txt +++ b/modules/stitching/CMakeLists.txt @@ -5,4 +5,4 @@ if(HAVE_CUDA) endif() ocv_define_module(stitching opencv_imgproc opencv_features2d opencv_calib3d opencv_objdetect - OPTIONAL opencv_cuda opencv_cudaarithm opencv_cudafilters opencv_cudafeatures2d opencv_cudalegacy opencv_xfeatures2d) + OPTIONAL opencv_cudaarithm opencv_cudafilters opencv_cudafeatures2d opencv_cudalegacy opencv_xfeatures2d) diff --git a/modules/stitching/src/stitcher.cpp b/modules/stitching/src/stitcher.cpp index 43efbd388..c515c192f 100644 --- a/modules/stitching/src/stitcher.cpp +++ b/modules/stitching/src/stitcher.cpp @@ -56,7 +56,7 @@ Stitcher Stitcher::createDefault(bool try_use_gpu) stitcher.setFeaturesMatcher(makePtr(try_use_gpu)); stitcher.setBundleAdjuster(makePtr()); -#ifdef HAVE_OPENCV_CUDA +#ifdef HAVE_CUDA if (try_use_gpu && cuda::getCudaEnabledDeviceCount() > 0) { #ifdef HAVE_OPENCV_XFEATURES2D @@ -544,7 +544,7 @@ Ptr createStitcher(bool try_use_gpu) stitcher->setFeaturesMatcher(makePtr(try_use_gpu)); stitcher->setBundleAdjuster(makePtr()); - #ifdef HAVE_OPENCV_CUDA + #ifdef HAVE_CUDA if (try_use_gpu && cuda::getCudaEnabledDeviceCount() > 0) { #ifdef HAVE_OPENCV_NONFREE diff --git a/modules/videostab/include/opencv2/videostab/global_motion.hpp b/modules/videostab/include/opencv2/videostab/global_motion.hpp index 547f1b282..5d51e4234 100644 --- a/modules/videostab/include/opencv2/videostab/global_motion.hpp +++ b/modules/videostab/include/opencv2/videostab/global_motion.hpp @@ -249,7 +249,7 @@ private: std::vector pointsPrevGood_, pointsGood_; }; -#if defined(HAVE_OPENCV_CUDAIMGPROC) && defined(HAVE_OPENCV_CUDA) && defined(HAVE_OPENCV_CUDAOPTFLOW) +#if defined(HAVE_OPENCV_CUDAIMGPROC) && defined(HAVE_OPENCV_CUDAOPTFLOW) class CV_EXPORTS KeypointBasedMotionEstimatorGpu : public ImageMotionEstimatorBase { @@ -280,7 +280,7 @@ private: std::vector rejectionStatus_; }; -#endif // defined(HAVE_OPENCV_CUDAIMGPROC) && defined(HAVE_OPENCV_CUDA) && defined(HAVE_OPENCV_CUDAOPTFLOW) +#endif // defined(HAVE_OPENCV_CUDAIMGPROC) && defined(HAVE_OPENCV_CUDAOPTFLOW) /** @brief Computes motion between two frames assuming that all the intermediate motions are known. diff --git a/modules/videostab/include/opencv2/videostab/wobble_suppression.hpp b/modules/videostab/include/opencv2/videostab/wobble_suppression.hpp index 6701d7810..3f0a9432b 100644 --- a/modules/videostab/include/opencv2/videostab/wobble_suppression.hpp +++ b/modules/videostab/include/opencv2/videostab/wobble_suppression.hpp @@ -119,7 +119,7 @@ private: Mat_ mapx_, mapy_; }; -#if defined(HAVE_OPENCV_CUDA) && defined(HAVE_OPENCV_CUDAWARPING) +#if defined(HAVE_OPENCV_CUDAWARPING) class CV_EXPORTS MoreAccurateMotionWobbleSuppressorGpu : public MoreAccurateMotionWobbleSuppressorBase { public: diff --git a/modules/videostab/src/global_motion.cpp b/modules/videostab/src/global_motion.cpp index 27e2bc3f4..409662203 100644 --- a/modules/videostab/src/global_motion.cpp +++ b/modules/videostab/src/global_motion.cpp @@ -837,7 +837,7 @@ Mat KeypointBasedMotionEstimatorGpu::estimate(const cuda::GpuMat &frame0, const return motionEstimator_->estimate(hostPointsPrev_, hostPoints_, ok); } -#endif // defined(HAVE_OPENCV_CUDAIMGPROC) && defined(HAVE_OPENCV_CUDA) && defined(HAVE_OPENCV_CUDAOPTFLOW) +#endif // defined(HAVE_OPENCV_CUDAIMGPROC) && defined(HAVE_OPENCV_CUDAOPTFLOW) Mat getMotion(int from, int to, const std::vector &motions) diff --git a/samples/cpp/stitching_detailed.cpp b/samples/cpp/stitching_detailed.cpp index 0d9b4a683..2d6351ae1 100644 --- a/samples/cpp/stitching_detailed.cpp +++ b/samples/cpp/stitching_detailed.cpp @@ -673,7 +673,7 @@ int main(int argc, char* argv[]) seam_finder = makePtr(); else if (seam_find_type == "gc_color") { -#ifdef HAVE_OPENCV_CUDA +#ifdef HAVE_OPENCV_CUDALEGACY if (try_cuda && cuda::getCudaEnabledDeviceCount() > 0) seam_finder = makePtr(GraphCutSeamFinderBase::COST_COLOR); else @@ -682,7 +682,7 @@ int main(int argc, char* argv[]) } else if (seam_find_type == "gc_colorgrad") { -#ifdef HAVE_OPENCV_CUDA +#ifdef HAVE_OPENCV_CUDALEGACY if (try_cuda && cuda::getCudaEnabledDeviceCount() > 0) seam_finder = makePtr(GraphCutSeamFinderBase::COST_COLOR_GRAD); else diff --git a/samples/cpp/videostab.cpp b/samples/cpp/videostab.cpp index 703acba41..2eea9b902 100644 --- a/samples/cpp/videostab.cpp +++ b/samples/cpp/videostab.cpp @@ -217,7 +217,7 @@ public: outlierRejector = tblor; } -#if defined(HAVE_OPENCV_CUDAIMGPROC) && defined(HAVE_OPENCV_CUDA) && defined(HAVE_OPENCV_CUDAOPTFLOW) +#if defined(HAVE_OPENCV_CUDAIMGPROC) && defined(HAVE_OPENCV_CUDAOPTFLOW) if (gpu) { Ptr kbest = makePtr(est); @@ -258,7 +258,7 @@ public: outlierRejector = tblor; } -#if defined(HAVE_OPENCV_CUDAIMGPROC) && defined(HAVE_OPENCV_CUDA) && defined(HAVE_OPENCV_CUDAOPTFLOW) +#if defined(HAVE_OPENCV_CUDAIMGPROC) && defined(HAVE_OPENCV_CUDAOPTFLOW) if (gpu) { Ptr kbest = makePtr(est); @@ -343,7 +343,6 @@ int main(int argc, const char **argv) return 0; } -#ifdef HAVE_OPENCV_CUDA if (arg("gpu") == "yes") { cout << "initializing GPU..."; cout.flush(); @@ -352,7 +351,6 @@ int main(int argc, const char **argv) deviceTmp.upload(hostTmp); cout << endl; } -#endif StabilizerBase *stabilizer = 0; @@ -421,7 +419,7 @@ int main(int argc, const char **argv) { Ptr ws = makePtr(); if (arg("gpu") == "yes") -#ifdef HAVE_OPENCV_CUDA +#ifdef HAVE_OPENCV_CUDAWARPING ws = makePtr(); #else throw runtime_error("OpenCV is built without CUDA support"); diff --git a/samples/gpu/CMakeLists.txt b/samples/gpu/CMakeLists.txt index 10c91991c..8741f1170 100644 --- a/samples/gpu/CMakeLists.txt +++ b/samples/gpu/CMakeLists.txt @@ -1,6 +1,6 @@ SET(OPENCV_CUDA_SAMPLES_REQUIRED_DEPS opencv_core opencv_flann opencv_imgproc opencv_imgcodecs opencv_videoio opencv_highgui opencv_ml opencv_video opencv_objdetect opencv_features2d - opencv_calib3d opencv_cuda opencv_superres + opencv_calib3d opencv_superres opencv_cudaarithm opencv_cudafilters opencv_cudawarping opencv_cudaimgproc opencv_cudafeatures2d opencv_cudaoptflow opencv_cudabgsegm opencv_cudastereo opencv_cudalegacy opencv_cudaobjdetect) diff --git a/samples/gpu/performance/performance.cpp b/samples/gpu/performance/performance.cpp index 082a6383c..cef979954 100644 --- a/samples/gpu/performance/performance.cpp +++ b/samples/gpu/performance/performance.cpp @@ -2,6 +2,7 @@ #include #include #include "performance.h" +#include "opencv2/core/cuda.hpp" using namespace std; using namespace cv; diff --git a/samples/gpu/performance/performance.h b/samples/gpu/performance/performance.h index d2386284d..98889f342 100644 --- a/samples/gpu/performance/performance.h +++ b/samples/gpu/performance/performance.h @@ -7,7 +7,6 @@ #include #include #include -#include "opencv2/cuda.hpp" #define TAB " " From a0691289f9b27e95e2eb28931ab8d24029dc0869 Mon Sep 17 00:00:00 2001 From: Vladislav Vinogradov Date: Thu, 15 Jan 2015 16:18:48 +0300 Subject: [PATCH 5/8] fix cudalegacy sanity test --- modules/cudalegacy/perf/perf_bgsegm.cpp | 7 ------- 1 file changed, 7 deletions(-) diff --git a/modules/cudalegacy/perf/perf_bgsegm.cpp b/modules/cudalegacy/perf/perf_bgsegm.cpp index a37c4fde1..436791049 100644 --- a/modules/cudalegacy/perf/perf_bgsegm.cpp +++ b/modules/cudalegacy/perf/perf_bgsegm.cpp @@ -122,13 +122,6 @@ PERF_TEST_P(Video, FGDStatModel, d_fgd->apply(d_frame, foreground); } - -#ifdef HAVE_OPENCV_CUDAIMGPROC - cv::cuda::GpuMat background3, background; - d_fgd->getBackgroundImage(background3); - cv::cuda::cvtColor(background3, background, cv::COLOR_BGR2BGRA); - CUDA_SANITY_CHECK(background, 1e-2, ERROR_RELATIVE); -#endif } else { From 2660eee96110076fa7e5e8e13cba7cd6ba903c78 Mon Sep 17 00:00:00 2001 From: Vladislav Vinogradov Date: Thu, 15 Jan 2015 19:00:54 +0300 Subject: [PATCH 6/8] restore CUDA module introduction put it into core documentation --- modules/core/doc/cuda.markdown | 85 ++++++++++++++++++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 modules/core/doc/cuda.markdown diff --git a/modules/core/doc/cuda.markdown b/modules/core/doc/cuda.markdown new file mode 100644 index 000000000..ebe8c21af --- /dev/null +++ b/modules/core/doc/cuda.markdown @@ -0,0 +1,85 @@ +CUDA Module Introduction {#cuda_intro} +======================== + +General Information +------------------- + +The OpenCV CUDA module is a set of classes and functions to utilize CUDA computational capabilities. +It is implemented using NVIDIA\* CUDA\* Runtime API and supports only NVIDIA GPUs. The OpenCV CUDA +module includes utility functions, low-level vision primitives, and high-level algorithms. The +utility functions and low-level primitives provide a powerful infrastructure for developing fast +vision algorithms taking advantage of CUDA whereas the high-level functionality includes some +state-of-the-art algorithms (such as stereo correspondence, face and people detectors, and others) +ready to be used by the application developers. + +The CUDA module is designed as a host-level API. This means that if you have pre-compiled OpenCV +CUDA binaries, you are not required to have the CUDA Toolkit installed or write any extra code to +make use of the CUDA. + +The OpenCV CUDA module is designed for ease of use and does not require any knowledge of CUDA. +Though, such a knowledge will certainly be useful to handle non-trivial cases or achieve the highest +performance. It is helpful to understand the cost of various operations, what the GPU does, what the +preferred data formats are, and so on. The CUDA module is an effective instrument for quick +implementation of CUDA-accelerated computer vision algorithms. However, if your algorithm involves +many simple operations, then, for the best possible performance, you may still need to write your +own kernels to avoid extra write and read operations on the intermediate results. + +To enable CUDA support, configure OpenCV using CMake with WITH\_CUDA=ON . When the flag is set and +if CUDA is installed, the full-featured OpenCV CUDA module is built. Otherwise, the module is still +built but at runtime all functions from the module throw Exception with CV\_GpuNotSupported error +code, except for cuda::getCudaEnabledDeviceCount(). The latter function returns zero GPU count in +this case. Building OpenCV without CUDA support does not perform device code compilation, so it does +not require the CUDA Toolkit installed. Therefore, using the cuda::getCudaEnabledDeviceCount() +function, you can implement a high-level algorithm that will detect GPU presence at runtime and +choose an appropriate implementation (CPU or GPU) accordingly. + +Compilation for Different NVIDIA\* Platforms +-------------------------------------------- + +NVIDIA\* compiler enables generating binary code (cubin and fatbin) and intermediate code (PTX). +Binary code often implies a specific GPU architecture and generation, so the compatibility with +other GPUs is not guaranteed. PTX is targeted for a virtual platform that is defined entirely by the +set of capabilities or features. Depending on the selected virtual platform, some of the +instructions are emulated or disabled, even if the real hardware supports all the features. + +At the first call, the PTX code is compiled to binary code for the particular GPU using a JIT +compiler. When the target GPU has a compute capability (CC) lower than the PTX code, JIT fails. By +default, the OpenCV CUDA module includes: + +\* + Binaries for compute capabilities 1.3 and 2.0 (controlled by CUDA\_ARCH\_BIN in CMake) + +\* + PTX code for compute capabilities 1.1 and 1.3 (controlled by CUDA\_ARCH\_PTX in CMake) + +This means that for devices with CC 1.3 and 2.0 binary images are ready to run. For all newer +platforms, the PTX code for 1.3 is JIT'ed to a binary image. For devices with CC 1.1 and 1.2, the +PTX for 1.1 is JIT'ed. For devices with CC 1.0, no code is available and the functions throw +Exception. For platforms where JIT compilation is performed first, the run is slow. + +On a GPU with CC 1.0, you can still compile the CUDA module and most of the functions will run +flawlessly. To achieve this, add "1.0" to the list of binaries, for example, +CUDA\_ARCH\_BIN="1.0 1.3 2.0" . The functions that cannot be run on CC 1.0 GPUs throw an exception. + +You can always determine at runtime whether the OpenCV GPU-built binaries (or PTX code) are +compatible with your GPU. The function cuda::DeviceInfo::isCompatible returns the compatibility +status (true/false). + +Utilizing Multiple GPUs +----------------------- + +In the current version, each of the OpenCV CUDA algorithms can use only a single GPU. So, to utilize +multiple GPUs, you have to manually distribute the work between GPUs. Switching active devie can be +done using cuda::setDevice() function. For more details please read Cuda C Programming Guide. + +While developing algorithms for multiple GPUs, note a data passing overhead. For primitive functions +and small images, it can be significant, which may eliminate all the advantages of having multiple +GPUs. But for high-level algorithms, consider using multi-GPU acceleration. For example, the Stereo +Block Matching algorithm has been successfully parallelized using the following algorithm: + +1. Split each image of the stereo pair into two horizontal overlapping stripes. +2. Process each pair of stripes (from the left and right images) on a separate Fermi\* GPU. +3. Merge the results into a single disparity map. + +With this algorithm, a dual GPU gave a 180% performance increase comparing to the single Fermi GPU. +For a source code example, see . From 6ebc95470bc6c9f301b55ddd3ffe5f5759372344 Mon Sep 17 00:00:00 2001 From: Vladislav Vinogradov Date: Fri, 16 Jan 2015 11:11:40 +0300 Subject: [PATCH 7/8] fix videostab compilation without CUDA --- modules/videostab/src/global_motion.cpp | 2 ++ modules/videostab/src/wobble_suppression.cpp | 2 ++ 2 files changed, 4 insertions(+) diff --git a/modules/videostab/src/global_motion.cpp b/modules/videostab/src/global_motion.cpp index 409662203..d73751e39 100644 --- a/modules/videostab/src/global_motion.cpp +++ b/modules/videostab/src/global_motion.cpp @@ -47,6 +47,8 @@ #include "opencv2/opencv_modules.hpp" #include "clp.hpp" +#include "opencv2/core/private.cuda.hpp" + #if !defined HAVE_CUDA || defined(CUDA_DISABLER) namespace cv { namespace cuda { diff --git a/modules/videostab/src/wobble_suppression.cpp b/modules/videostab/src/wobble_suppression.cpp index d05fd05cc..98fb69900 100644 --- a/modules/videostab/src/wobble_suppression.cpp +++ b/modules/videostab/src/wobble_suppression.cpp @@ -44,6 +44,8 @@ #include "opencv2/videostab/wobble_suppression.hpp" #include "opencv2/videostab/ring_buffer.hpp" +#include "opencv2/core/private.cuda.hpp" + #ifdef HAVE_OPENCV_CUDAWARPING # include "opencv2/cudawarping.hpp" #endif From c9e07bbc95ef1ed018f6d0922bb3b93bfc5e5463 Mon Sep 17 00:00:00 2001 From: Vladislav Vinogradov Date: Thu, 22 Jan 2015 16:36:16 +0300 Subject: [PATCH 8/8] exclude compactPoints and calcWobbleSuppressionMaps from compilation if they are not needed --- modules/videostab/src/global_motion.cpp | 49 ++++++++--------- modules/videostab/src/wobble_suppression.cpp | 55 +++++++++----------- 2 files changed, 49 insertions(+), 55 deletions(-) diff --git a/modules/videostab/src/global_motion.cpp b/modules/videostab/src/global_motion.cpp index d73751e39..d840e895d 100644 --- a/modules/videostab/src/global_motion.cpp +++ b/modules/videostab/src/global_motion.cpp @@ -49,34 +49,31 @@ #include "opencv2/core/private.cuda.hpp" -#if !defined HAVE_CUDA || defined(CUDA_DISABLER) +#if defined(HAVE_OPENCV_CUDAIMGPROC) && defined(HAVE_OPENCV_CUDAOPTFLOW) + #if !defined HAVE_CUDA || defined(CUDA_DISABLER) + namespace cv { namespace cuda { + static void compactPoints(GpuMat&, GpuMat&, const GpuMat&) { throw_no_cuda(); } + }} + #else + namespace cv { namespace cuda { namespace device { namespace globmotion { + int compactPoints(int N, float *points0, float *points1, const uchar *mask); + }}}} + namespace cv { namespace cuda { + static void compactPoints(GpuMat &points0, GpuMat &points1, const GpuMat &mask) + { + CV_Assert(points0.rows == 1 && points1.rows == 1 && mask.rows == 1); + CV_Assert(points0.type() == CV_32FC2 && points1.type() == CV_32FC2 && mask.type() == CV_8U); + CV_Assert(points0.cols == mask.cols && points1.cols == mask.cols); -namespace cv { namespace cuda { - static void compactPoints(GpuMat&, GpuMat&, const GpuMat&) { throw_no_cuda(); } -}} - -#else - -namespace cv { namespace cuda { namespace device { namespace globmotion { - int compactPoints(int N, float *points0, float *points1, const uchar *mask); -}}}} - -namespace cv { namespace cuda { - static void compactPoints(GpuMat &points0, GpuMat &points1, const GpuMat &mask) - { - CV_Assert(points0.rows == 1 && points1.rows == 1 && mask.rows == 1); - CV_Assert(points0.type() == CV_32FC2 && points1.type() == CV_32FC2 && mask.type() == CV_8U); - CV_Assert(points0.cols == mask.cols && points1.cols == mask.cols); - - int npoints = points0.cols; - int remaining = cv::cuda::device::globmotion::compactPoints( - npoints, (float*)points0.data, (float*)points1.data, mask.data); - - points0 = points0.colRange(0, remaining); - points1 = points1.colRange(0, remaining); - } -}} + int npoints = points0.cols; + int remaining = cv::cuda::device::globmotion::compactPoints( + npoints, (float*)points0.data, (float*)points1.data, mask.data); + points0 = points0.colRange(0, remaining); + points1 = points1.colRange(0, remaining); + } + }} + #endif #endif namespace cv diff --git a/modules/videostab/src/wobble_suppression.cpp b/modules/videostab/src/wobble_suppression.cpp index 98fb69900..86067fbcc 100644 --- a/modules/videostab/src/wobble_suppression.cpp +++ b/modules/videostab/src/wobble_suppression.cpp @@ -50,37 +50,34 @@ # include "opencv2/cudawarping.hpp" #endif -#if !defined HAVE_CUDA || defined(CUDA_DISABLER) +#if defined(HAVE_OPENCV_CUDAWARPING) + #if !defined HAVE_CUDA || defined(CUDA_DISABLER) + namespace cv { namespace cuda { + static void calcWobbleSuppressionMaps(int, int, int, Size, const Mat&, const Mat&, GpuMat&, GpuMat&) { throw_no_cuda(); } + }} + #else + namespace cv { namespace cuda { namespace device { namespace globmotion { + void calcWobbleSuppressionMaps( + int left, int idx, int right, int width, int height, + const float *ml, const float *mr, PtrStepSzf mapx, PtrStepSzf mapy); + }}}} + namespace cv { namespace cuda { + static void calcWobbleSuppressionMaps( + int left, int idx, int right, Size size, const Mat &ml, const Mat &mr, + GpuMat &mapx, GpuMat &mapy) + { + CV_Assert(ml.size() == Size(3, 3) && ml.type() == CV_32F && ml.isContinuous()); + CV_Assert(mr.size() == Size(3, 3) && mr.type() == CV_32F && mr.isContinuous()); -namespace cv { namespace cuda { - static void calcWobbleSuppressionMaps(int, int, int, Size, const Mat&, const Mat&, GpuMat&, GpuMat&) { throw_no_cuda(); } -}} - -#else - -namespace cv { namespace cuda { namespace device { namespace globmotion { - void calcWobbleSuppressionMaps( - int left, int idx, int right, int width, int height, - const float *ml, const float *mr, PtrStepSzf mapx, PtrStepSzf mapy); -}}}} - -namespace cv { namespace cuda { - static void calcWobbleSuppressionMaps( - int left, int idx, int right, Size size, const Mat &ml, const Mat &mr, - GpuMat &mapx, GpuMat &mapy) - { - CV_Assert(ml.size() == Size(3, 3) && ml.type() == CV_32F && ml.isContinuous()); - CV_Assert(mr.size() == Size(3, 3) && mr.type() == CV_32F && mr.isContinuous()); - - mapx.create(size, CV_32F); - mapy.create(size, CV_32F); - - cv::cuda::device::globmotion::calcWobbleSuppressionMaps( - left, idx, right, size.width, size.height, - ml.ptr(), mr.ptr(), mapx, mapy); - } -}} + mapx.create(size, CV_32F); + mapy.create(size, CV_32F); + cv::cuda::device::globmotion::calcWobbleSuppressionMaps( + left, idx, right, size.width, size.height, + ml.ptr(), mr.ptr(), mapx, mapy); + } + }} + #endif #endif namespace cv