From af2a700671797050b8a3c9a7bd171d2ac3c08710 Mon Sep 17 00:00:00 2001 From: Vladislav Vinogradov Date: Tue, 7 May 2013 12:26:27 +0400 Subject: [PATCH] made module dependency optional --- modules/gpubgsegm/CMakeLists.txt | 2 +- modules/gpubgsegm/perf/perf_bgsegm.cpp | 35 ++++++++++++++++++------- modules/gpubgsegm/perf/perf_precomp.hpp | 2 ++ modules/gpubgsegm/src/fgd.cpp | 12 ++++++++- modules/gpubgsegm/src/gmg.cpp | 8 +++++- modules/gpubgsegm/src/precomp.hpp | 15 ++++++++--- modules/gpubgsegm/test/test_bgsegm.cpp | 7 +++-- modules/gpubgsegm/test/test_precomp.hpp | 2 ++ 8 files changed, 66 insertions(+), 17 deletions(-) diff --git a/modules/gpubgsegm/CMakeLists.txt b/modules/gpubgsegm/CMakeLists.txt index f37ec595cf..f87f3cb88c 100644 --- a/modules/gpubgsegm/CMakeLists.txt +++ b/modules/gpubgsegm/CMakeLists.txt @@ -6,4 +6,4 @@ set(the_description "GPU-accelerated Background Segmentation") ocv_warnings_disable(CMAKE_CXX_FLAGS /wd4127 /wd4324 /wd4512 -Wundef -Wmissing-declarations) -ocv_define_module(gpubgsegm opencv_video opencv_imgproc opencv_legacy opencv_gpuarithm opencv_gpufilters opencv_gpuimgproc) +ocv_define_module(gpubgsegm opencv_video OPTIONAL opencv_legacy opencv_imgproc opencv_gpuarithm opencv_gpufilters opencv_gpuimgproc) diff --git a/modules/gpubgsegm/perf/perf_bgsegm.cpp b/modules/gpubgsegm/perf/perf_bgsegm.cpp index 33e4403795..d4421691e7 100644 --- a/modules/gpubgsegm/perf/perf_bgsegm.cpp +++ b/modules/gpubgsegm/perf/perf_bgsegm.cpp @@ -41,8 +41,14 @@ //M*/ #include "perf_precomp.hpp" -#include "opencv2/legacy.hpp" -#include "opencv2/gpuimgproc.hpp" + +#ifdef HAVE_OPENCV_LEGACY +# include "opencv2/legacy.hpp" +#endif + +#ifdef HAVE_OPENCV_GPUIMGPROC +# include "opencv2/gpuimgproc.hpp" +#endif using namespace std; using namespace testing; @@ -60,6 +66,13 @@ using namespace perf; # define BUILD_WITH_VIDEO_INPUT_SUPPORT 0 #endif +////////////////////////////////////////////////////// +// FGDStatModel + +#if BUILD_WITH_VIDEO_INPUT_SUPPORT + +#ifdef HAVE_OPENCV_LEGACY + namespace cv { template<> void Ptr::delete_obj() @@ -68,10 +81,7 @@ namespace cv } } -////////////////////////////////////////////////////// -// FGDStatModel - -#if BUILD_WITH_VIDEO_INPUT_SUPPORT +#endif DEF_PARAM_TEST_1(Video, string); @@ -91,7 +101,7 @@ PERF_TEST_P(Video, FGDStatModel, if (PERF_RUN_GPU()) { - cv::gpu::GpuMat d_frame(frame), foreground, background3, background; + cv::gpu::GpuMat d_frame(frame), foreground; cv::Ptr d_fgd = cv::gpu::createBackgroundSubtractorFGD(); d_fgd->apply(d_frame, foreground); @@ -108,14 +118,18 @@ PERF_TEST_P(Video, FGDStatModel, stopTimer(); } + GPU_SANITY_CHECK(foreground, 1e-2, ERROR_RELATIVE); + +#ifdef HAVE_OPENCV_GPUIMGPROC + cv::gpu::GpuMat background3, background; d_fgd->getBackgroundImage(background3); cv::gpu::cvtColor(background3, background, cv::COLOR_BGR2BGRA); - GPU_SANITY_CHECK(background, 1e-2, ERROR_RELATIVE); - GPU_SANITY_CHECK(foreground, 1e-2, ERROR_RELATIVE); +#endif } else { +#ifdef HAVE_OPENCV_LEGACY IplImage ipl_frame = frame; cv::Ptr model(cvCreateFGDStatModel(&ipl_frame)); @@ -136,6 +150,9 @@ PERF_TEST_P(Video, FGDStatModel, CPU_SANITY_CHECK(background); CPU_SANITY_CHECK(foreground); +#else + FAIL_NO_CPU(); +#endif } } diff --git a/modules/gpubgsegm/perf/perf_precomp.hpp b/modules/gpubgsegm/perf/perf_precomp.hpp index 3a13b9200b..83d0fd4f0f 100644 --- a/modules/gpubgsegm/perf/perf_precomp.hpp +++ b/modules/gpubgsegm/perf/perf_precomp.hpp @@ -57,6 +57,8 @@ #include "opencv2/gpubgsegm.hpp" #include "opencv2/video.hpp" +#include "opencv2/opencv_modules.hpp" + #ifdef GTEST_CREATE_SHARED_LIBRARY #error no modules except ts should have GTEST_CREATE_SHARED_LIBRARY defined #endif diff --git a/modules/gpubgsegm/src/fgd.cpp b/modules/gpubgsegm/src/fgd.cpp index 14dcc783a9..ef203e074f 100644 --- a/modules/gpubgsegm/src/fgd.cpp +++ b/modules/gpubgsegm/src/fgd.cpp @@ -45,7 +45,7 @@ using namespace cv; using namespace cv::gpu; -#if !defined HAVE_CUDA || defined(CUDA_DISABLER) +#if !defined(HAVE_CUDA) || defined(CUDA_DISABLER) || !defined(HAVE_OPENCV_IMGPROC) || !defined(HAVE_OPENCV_GPUARITHM) || !defined(HAVE_OPENCV_GPUIMGPROC) cv::gpu::FGDParams::FGDParams() { throw_no_cuda(); } @@ -309,6 +309,8 @@ namespace ///////////////////////////////////////////////////////////////////////// // smoothForeground +#ifdef HAVE_OPENCV_GPUFILTERS + namespace { void morphology(const GpuMat& src, GpuMat& dst, GpuMat& filterBrd, int brd, Ptr& filter, Scalar brdVal) @@ -336,6 +338,8 @@ namespace } } +#endif + ///////////////////////////////////////////////////////////////////////// // findForegroundRegions @@ -606,8 +610,10 @@ namespace GpuMat buf_; GpuMat filterBrd_; +#ifdef HAVE_OPENCV_GPUFILTERS Ptr dilateFilter_; Ptr erodeFilter_; +#endif CvMemStorage* storage_; }; @@ -645,8 +651,10 @@ namespace int FG_pixels_count = bgfgClassification(prevFrame_, curFrame, Ftd_, Fbd_, foreground_, countBuf_, params_, 4); +#ifdef HAVE_OPENCV_GPUFILTERS if (params_.perform_morphing > 0) smoothForeground(foreground_, filterBrd_, buf_, erodeFilter_, dilateFilter_, params_); +#endif if (params_.minArea > 0 || params_.is_obj_without_holes) findForegroundRegions(foreground_, h_foreground_, foreground_regions_, storage_, params_); @@ -702,6 +710,7 @@ namespace stat_.create(firstFrame.size(), params_); fgd::setBGPixelStat(stat_); +#ifdef HAVE_OPENCV_GPUFILTERS if (params_.perform_morphing > 0) { Mat kernel = getStructuringElement(MORPH_RECT, Size(1 + params_.perform_morphing * 2, 1 + params_.perform_morphing * 2)); @@ -710,6 +719,7 @@ namespace dilateFilter_ = gpu::createMorphologyFilter(MORPH_DILATE, CV_8UC1, kernel, anchor); erodeFilter_ = gpu::createMorphologyFilter(MORPH_ERODE, CV_8UC1, kernel, anchor); } +#endif } } diff --git a/modules/gpubgsegm/src/gmg.cpp b/modules/gpubgsegm/src/gmg.cpp index e11d1bd41c..2cc0f4d574 100644 --- a/modules/gpubgsegm/src/gmg.cpp +++ b/modules/gpubgsegm/src/gmg.cpp @@ -45,7 +45,7 @@ using namespace cv; using namespace cv::gpu; -#if !defined HAVE_CUDA || defined(CUDA_DISABLER) || !defined(HAVE_OPENCV_GPUFILTERS) +#if !defined HAVE_CUDA || defined(CUDA_DISABLER) Ptr cv::gpu::createBackgroundSubtractorGMG(int, double) { throw_no_cuda(); return Ptr(); } @@ -141,8 +141,10 @@ namespace GpuMat colors_; GpuMat weights_; +#if defined(HAVE_OPENCV_GPUFILTERS) && defined(HAVE_OPENCV_GPUARITHM) Ptr boxFilter_; GpuMat buf_; +#endif }; GMGImpl::GMGImpl(int initializationFrames, double decisionThreshold) @@ -212,6 +214,7 @@ namespace funcs[frame.depth()][frame.channels() - 1](frame, fgmask, colors_, weights_, nfeatures_, frameNum_, learningRate_, updateBackgroundModel_, StreamAccessor::getStream(stream)); +#if defined(HAVE_OPENCV_GPUFILTERS) && defined(HAVE_OPENCV_GPUARITHM) // medianBlur if (smoothingRadius_ > 0) { @@ -220,6 +223,7 @@ namespace const double thresh = 255.0 * minCount / (smoothingRadius_ * smoothingRadius_); gpu::threshold(buf_, fgmask, thresh, 255.0, THRESH_BINARY, stream); } +#endif // keep track of how many frames we have processed ++frameNum_; @@ -255,8 +259,10 @@ namespace nfeatures_.setTo(Scalar::all(0)); +#if defined(HAVE_OPENCV_GPUFILTERS) && defined(HAVE_OPENCV_GPUARITHM) if (smoothingRadius_ > 0) boxFilter_ = gpu::createBoxFilter(CV_8UC1, -1, Size(smoothingRadius_, smoothingRadius_)); +#endif loadConstants(frameSize_.width, frameSize_.height, minVal_, maxVal_, quantizationLevels_, backgroundPrior_, decisionThreshold_, maxFeatures_, numInitializationFrames_); diff --git a/modules/gpubgsegm/src/precomp.hpp b/modules/gpubgsegm/src/precomp.hpp index f3aa637e48..c61cc08bbe 100644 --- a/modules/gpubgsegm/src/precomp.hpp +++ b/modules/gpubgsegm/src/precomp.hpp @@ -46,12 +46,21 @@ #include #include "opencv2/gpubgsegm.hpp" -#include "opencv2/gpuarithm.hpp" -#include "opencv2/gpufilters.hpp" -#include "opencv2/gpuimgproc.hpp" #include "opencv2/core/private.gpu.hpp" #include "opencv2/opencv_modules.hpp" +#ifdef HAVE_OPENCV_GPUARITHM +# include "opencv2/gpuarithm.hpp" +#endif + +#ifdef HAVE_OPENCV_GPUFILTERS +# include "opencv2/gpufilters.hpp" +#endif + +#ifdef HAVE_OPENCV_GPUIMGPROC +# include "opencv2/gpuimgproc.hpp" +#endif + #endif /* __OPENCV_PRECOMP_H__ */ diff --git a/modules/gpubgsegm/test/test_bgsegm.cpp b/modules/gpubgsegm/test/test_bgsegm.cpp index af2d2ff7f3..e8fc68ddcb 100644 --- a/modules/gpubgsegm/test/test_bgsegm.cpp +++ b/modules/gpubgsegm/test/test_bgsegm.cpp @@ -41,7 +41,10 @@ //M*/ #include "test_precomp.hpp" -#include "opencv2/legacy.hpp" + +#ifdef HAVE_OPENCV_LEGACY +# include "opencv2/legacy.hpp" +#endif #ifdef HAVE_CUDA @@ -62,7 +65,7 @@ using namespace cvtest; ////////////////////////////////////////////////////// // FGDStatModel -#if BUILD_WITH_VIDEO_INPUT_SUPPORT +#if BUILD_WITH_VIDEO_INPUT_SUPPORT && defined(HAVE_OPENCV_LEGACY) namespace cv { diff --git a/modules/gpubgsegm/test/test_precomp.hpp b/modules/gpubgsegm/test/test_precomp.hpp index 0249f5be91..9422c2a80b 100644 --- a/modules/gpubgsegm/test/test_precomp.hpp +++ b/modules/gpubgsegm/test/test_precomp.hpp @@ -59,4 +59,6 @@ #include "opencv2/gpubgsegm.hpp" #include "opencv2/video.hpp" +#include "opencv2/opencv_modules.hpp" + #endif