diff --git a/modules/photo/CMakeLists.txt b/modules/photo/CMakeLists.txt index b3e0e18dc..5b47d3a1d 100644 --- a/modules/photo/CMakeLists.txt +++ b/modules/photo/CMakeLists.txt @@ -4,4 +4,4 @@ if(HAVE_CUDA) ocv_warnings_disable(CMAKE_CXX_FLAGS -Wundef -Wmissing-declarations) endif() -ocv_define_module(photo opencv_imgproc OPTIONAL opencv_gpuimgproc) +ocv_define_module(photo opencv_imgproc OPTIONAL opencv_gpuarithm opencv_gpuimgproc) diff --git a/modules/photo/perf/perf_gpu.cpp b/modules/photo/perf/perf_gpu.cpp index f33dd8199..ec62f7a0c 100644 --- a/modules/photo/perf/perf_gpu.cpp +++ b/modules/photo/perf/perf_gpu.cpp @@ -45,6 +45,10 @@ #include "opencv2/photo/gpu.hpp" #include "opencv2/ts/gpu_perf.hpp" +#include "opencv2/opencv_modules.hpp" + +#if defined (HAVE_CUDA) && defined(HAVE_OPENCV_GPUARITHM) && defined(HAVE_OPENCV_GPUIMGPROC) + using namespace std; using namespace testing; using namespace perf; @@ -56,7 +60,7 @@ using namespace perf; DEF_PARAM_TEST(Sz_Depth_Cn_WinSz_BlockSz, cv::Size, MatDepth, MatCn, int, int); -PERF_TEST_P(Sz_Depth_Cn_WinSz_BlockSz, Denoising_NonLocalMeans, +PERF_TEST_P(Sz_Depth_Cn_WinSz_BlockSz, GPU_NonLocalMeans, Combine(GPU_DENOISING_IMAGE_SIZES, Values(CV_8U), GPU_CHANNELS_1_3, @@ -100,7 +104,7 @@ PERF_TEST_P(Sz_Depth_Cn_WinSz_BlockSz, Denoising_NonLocalMeans, DEF_PARAM_TEST(Sz_Depth_Cn_WinSz_BlockSz, cv::Size, MatDepth, MatCn, int, int); -PERF_TEST_P(Sz_Depth_Cn_WinSz_BlockSz, Denoising_FastNonLocalMeans, +PERF_TEST_P(Sz_Depth_Cn_WinSz_BlockSz, GPU_FastNonLocalMeans, Combine(GPU_DENOISING_IMAGE_SIZES, Values(CV_8U), GPU_CHANNELS_1_3, @@ -146,7 +150,7 @@ PERF_TEST_P(Sz_Depth_Cn_WinSz_BlockSz, Denoising_FastNonLocalMeans, DEF_PARAM_TEST(Sz_Depth_WinSz_BlockSz, cv::Size, MatDepth, int, int); -PERF_TEST_P(Sz_Depth_WinSz_BlockSz, Denoising_FastNonLocalMeansColored, +PERF_TEST_P(Sz_Depth_WinSz_BlockSz, GPU_FastNonLocalMeansColored, Combine(GPU_DENOISING_IMAGE_SIZES, Values(CV_8U), Values(21), @@ -185,3 +189,5 @@ PERF_TEST_P(Sz_Depth_WinSz_BlockSz, Denoising_FastNonLocalMeansColored, CPU_SANITY_CHECK(dst); } } + +#endif diff --git a/modules/photo/src/cuda/nlm.cu b/modules/photo/src/cuda/nlm.cu index 03044697d..44ed4dc6b 100644 --- a/modules/photo/src/cuda/nlm.cu +++ b/modules/photo/src/cuda/nlm.cu @@ -40,8 +40,6 @@ // //M*/ -#if !defined CUDA_DISABLER - #include "opencv2/core/cuda/common.hpp" #include "opencv2/core/cuda/vec_traits.hpp" #include "opencv2/core/cuda/vec_math.hpp" @@ -564,6 +562,3 @@ namespace cv { namespace gpu { namespace cudev } } }}} - - -#endif /* CUDA_DISABLER */ diff --git a/modules/photo/src/denoising_gpu.cpp b/modules/photo/src/denoising_gpu.cpp index 65d6f8121..954b1611b 100644 --- a/modules/photo/src/denoising_gpu.cpp +++ b/modules/photo/src/denoising_gpu.cpp @@ -44,13 +44,21 @@ #include "opencv2/photo/gpu.hpp" #include "opencv2/core/gpu_private.hpp" -#include "opencv2/gpuarithm.hpp" -#include "opencv2/gpuimgproc.hpp" + +#include "opencv2/opencv_modules.hpp" + +#ifdef HAVE_OPENCV_GPUARITHM +# include "opencv2/gpuarithm.hpp" +#endif + +#ifdef HAVE_OPENCV_GPUIMGPROC +# include "opencv2/gpuimgproc.hpp" +#endif using namespace cv; using namespace cv::gpu; -#if !defined (HAVE_CUDA) || defined (CUDA_DISABLER) +#if !defined (HAVE_CUDA) || !defined(HAVE_OPENCV_GPUARITHM) || !defined(HAVE_OPENCV_GPUIMGPROC) void cv::gpu::nonLocalMeans(const GpuMat&, GpuMat&, float, int, int, int, Stream&) { throw_no_cuda(); } void cv::gpu::FastNonLocalMeansDenoising::simpleMethod(const GpuMat&, GpuMat&, float, int, int, Stream&) { throw_no_cuda(); } @@ -147,7 +155,4 @@ void cv::gpu::FastNonLocalMeansDenoising::labMethod( const GpuMat& src, GpuMat& cv::gpu::cvtColor(lab, dst, cv::COLOR_Lab2BGR, 0, s); } - #endif - - diff --git a/modules/photo/test/test_denoising_gpu.cpp b/modules/photo/test/test_denoising_gpu.cpp index f46a49fc1..caf3b23f2 100644 --- a/modules/photo/test/test_denoising_gpu.cpp +++ b/modules/photo/test/test_denoising_gpu.cpp @@ -45,18 +45,20 @@ #include "opencv2/photo/gpu.hpp" #include "opencv2/ts/gpu_test.hpp" -#ifdef HAVE_CUDA +#include "opencv2/opencv_modules.hpp" + +#if defined (HAVE_CUDA) && defined(HAVE_OPENCV_GPUARITHM) && defined(HAVE_OPENCV_GPUIMGPROC) using namespace cvtest; //////////////////////////////////////////////////////// // Brute Force Non local means -TEST(BruteForceNonLocalMeans, Regression) +TEST(GPU_BruteForceNonLocalMeans, Regression) { using cv::gpu::GpuMat; - cv::Mat bgr = readImage("denoising/lena_noised_gaussian_sigma=20_multi_0.png", cv::IMREAD_COLOR); + cv::Mat bgr = readImage("../gpu/denoising/lena_noised_gaussian_sigma=20_multi_0.png", cv::IMREAD_COLOR); ASSERT_FALSE(bgr.empty()); cv::Mat gray; @@ -67,12 +69,12 @@ TEST(BruteForceNonLocalMeans, Regression) cv::gpu::nonLocalMeans(GpuMat(gray), dgray, 20); #if 0 - dumpImage("denoising/nlm_denoised_lena_bgr.png", cv::Mat(dbgr)); - dumpImage("denoising/nlm_denoised_lena_gray.png", cv::Mat(dgray)); + dumpImage("../gpu/denoising/nlm_denoised_lena_bgr.png", cv::Mat(dbgr)); + dumpImage("../gpu/denoising/nlm_denoised_lena_gray.png", cv::Mat(dgray)); #endif - cv::Mat bgr_gold = readImage("denoising/nlm_denoised_lena_bgr.png", cv::IMREAD_COLOR); - cv::Mat gray_gold = readImage("denoising/nlm_denoised_lena_gray.png", cv::IMREAD_GRAYSCALE); + cv::Mat bgr_gold = readImage("../gpu/denoising/nlm_denoised_lena_bgr.png", cv::IMREAD_COLOR); + cv::Mat gray_gold = readImage("../gpu/denoising/nlm_denoised_lena_gray.png", cv::IMREAD_GRAYSCALE); ASSERT_FALSE(bgr_gold.empty() || gray_gold.empty()); EXPECT_MAT_NEAR(bgr_gold, dbgr, 1e-4); @@ -82,11 +84,11 @@ TEST(BruteForceNonLocalMeans, Regression) //////////////////////////////////////////////////////// // Fast Force Non local means -TEST(FastNonLocalMeans, Regression) +TEST(GPU_FastNonLocalMeans, Regression) { using cv::gpu::GpuMat; - cv::Mat bgr = readImage("denoising/lena_noised_gaussian_sigma=20_multi_0.png", cv::IMREAD_COLOR); + cv::Mat bgr = readImage("../gpu/denoising/lena_noised_gaussian_sigma=20_multi_0.png", cv::IMREAD_COLOR); ASSERT_FALSE(bgr.empty()); cv::Mat gray; @@ -99,12 +101,12 @@ TEST(FastNonLocalMeans, Regression) fnlmd.labMethod(GpuMat(bgr), dbgr, 20, 10); #if 0 - dumpImage("denoising/fnlm_denoised_lena_bgr.png", cv::Mat(dbgr)); - dumpImage("denoising/fnlm_denoised_lena_gray.png", cv::Mat(dgray)); + dumpImage("../gpu/denoising/fnlm_denoised_lena_bgr.png", cv::Mat(dbgr)); + dumpImage("../gpu/denoising/fnlm_denoised_lena_gray.png", cv::Mat(dgray)); #endif - cv::Mat bgr_gold = readImage("denoising/fnlm_denoised_lena_bgr.png", cv::IMREAD_COLOR); - cv::Mat gray_gold = readImage("denoising/fnlm_denoised_lena_gray.png", cv::IMREAD_GRAYSCALE); + cv::Mat bgr_gold = readImage("../gpu/denoising/fnlm_denoised_lena_bgr.png", cv::IMREAD_COLOR); + cv::Mat gray_gold = readImage("../gpu/denoising/fnlm_denoised_lena_gray.png", cv::IMREAD_GRAYSCALE); ASSERT_FALSE(bgr_gold.empty() || gray_gold.empty()); EXPECT_MAT_NEAR(bgr_gold, dbgr, 1);