From fdeec6896c4084f72ead53fe600eb34512cc7a0e Mon Sep 17 00:00:00 2001 From: Vladislav Vinogradov Date: Thu, 18 Apr 2013 13:28:30 +0400 Subject: [PATCH] stitching module fixes --- modules/stitching/CMakeLists.txt | 3 ++- .../include/opencv2/stitching/detail/matchers.hpp | 7 ++++--- .../include/opencv2/stitching/detail/warpers.hpp | 6 ++---- .../stitching/include/opencv2/stitching/warpers.hpp | 2 +- modules/stitching/src/blenders.cpp | 10 ++++++---- modules/stitching/src/matchers.cpp | 19 ++++++++++--------- modules/stitching/src/precomp.hpp | 20 +++++++++++++++++--- modules/stitching/src/stitcher.cpp | 2 +- modules/stitching/src/warpers.cpp | 2 +- samples/cpp/stitching_detailed.cpp | 4 ++-- 10 files changed, 46 insertions(+), 29 deletions(-) diff --git a/modules/stitching/CMakeLists.txt b/modules/stitching/CMakeLists.txt index 647d8b1..fa9adfc 100644 --- a/modules/stitching/CMakeLists.txt +++ b/modules/stitching/CMakeLists.txt @@ -1,3 +1,4 @@ set(the_description "Images stitching") -ocv_define_module(stitching opencv_imgproc opencv_features2d opencv_calib3d opencv_objdetect OPTIONAL opencv_gpu opencv_gpuarithm opencv_gpufilters opencv_nonfree) +ocv_define_module(stitching opencv_imgproc opencv_features2d opencv_calib3d opencv_objdetect + OPTIONAL opencv_gpu opencv_gpuarithm opencv_gpufilters opencv_gpufeatures2d opencv_nonfree) diff --git a/modules/stitching/include/opencv2/stitching/detail/matchers.hpp b/modules/stitching/include/opencv2/stitching/detail/matchers.hpp index 7461a67..0b24e78 100644 --- a/modules/stitching/include/opencv2/stitching/detail/matchers.hpp +++ b/modules/stitching/include/opencv2/stitching/detail/matchers.hpp @@ -47,8 +47,9 @@ #include "opencv2/features2d.hpp" #include "opencv2/opencv_modules.hpp" -#if defined(HAVE_OPENCV_NONFREE) && defined(HAVE_OPENCV_GPU) -#include "opencv2/nonfree/gpu.hpp" + +#ifdef HAVE_OPENCV_NONFREE +# include "opencv2/nonfree/gpu.hpp" #endif namespace cv { @@ -103,7 +104,7 @@ private: }; -#if defined(HAVE_OPENCV_NONFREE) && defined(HAVE_OPENCV_GPU) +#ifdef HAVE_OPENCV_NONFREE class CV_EXPORTS SurfFeaturesFinderGpu : public FeaturesFinder { public: diff --git a/modules/stitching/include/opencv2/stitching/detail/warpers.hpp b/modules/stitching/include/opencv2/stitching/detail/warpers.hpp index 693363d..55b4d3a 100644 --- a/modules/stitching/include/opencv2/stitching/detail/warpers.hpp +++ b/modules/stitching/include/opencv2/stitching/detail/warpers.hpp @@ -44,11 +44,9 @@ #define __OPENCV_STITCHING_WARPERS_HPP__ #include "opencv2/core.hpp" +#include "opencv2/core/gpumat.hpp" #include "opencv2/imgproc.hpp" #include "opencv2/opencv_modules.hpp" -#ifdef HAVE_OPENCV_GPU -# include "opencv2/gpu.hpp" -#endif namespace cv { namespace detail { @@ -329,7 +327,7 @@ public: }; -#ifdef HAVE_OPENCV_GPU +#ifdef HAVE_OPENCV_GPUWARPING class CV_EXPORTS PlaneWarperGpu : public PlaneWarper { public: diff --git a/modules/stitching/include/opencv2/stitching/warpers.hpp b/modules/stitching/include/opencv2/stitching/warpers.hpp index 7475d13..9d62d35 100644 --- a/modules/stitching/include/opencv2/stitching/warpers.hpp +++ b/modules/stitching/include/opencv2/stitching/warpers.hpp @@ -145,7 +145,7 @@ public: -#ifdef HAVE_OPENCV_GPU +#ifdef HAVE_OPENCV_GPUWARPING class PlaneWarperGpu: public WarperCreator { public: diff --git a/modules/stitching/src/blenders.cpp b/modules/stitching/src/blenders.cpp index 0a53464..0043b73 100644 --- a/modules/stitching/src/blenders.cpp +++ b/modules/stitching/src/blenders.cpp @@ -187,12 +187,14 @@ Rect FeatherBlender::createWeightMaps(const std::vector &masks, const std:: MultiBandBlender::MultiBandBlender(int try_gpu, int num_bands, int weight_type) { setNumBands(num_bands); -#ifdef HAVE_OPENCV_GPU + +#if defined(HAVE_OPENCV_GPUARITHM) && defined(HAVE_OPENCV_GPUWARPING) can_use_gpu_ = try_gpu && gpu::getCudaEnabledDeviceCount(); #else - (void)try_gpu; + (void) try_gpu; can_use_gpu_ = false; #endif + CV_Assert(weight_type == CV_32F || weight_type == CV_16S); weight_type_ = weight_type; } @@ -489,7 +491,7 @@ void createLaplacePyr(const Mat &img, int num_levels, std::vector &pyr) void createLaplacePyrGpu(const Mat &img, int num_levels, std::vector &pyr) { -#ifdef HAVE_OPENCV_GPU +#if defined(HAVE_OPENCV_GPUARITHM) && defined(HAVE_OPENCV_GPUWARPING) pyr.resize(num_levels + 1); std::vector gpu_pyr(num_levels + 1); @@ -529,7 +531,7 @@ void restoreImageFromLaplacePyr(std::vector &pyr) void restoreImageFromLaplacePyrGpu(std::vector &pyr) { -#ifdef HAVE_OPENCV_GPU +#if defined(HAVE_OPENCV_GPUARITHM) && defined(HAVE_OPENCV_GPUWARPING) if (pyr.empty()) return; diff --git a/modules/stitching/src/matchers.cpp b/modules/stitching/src/matchers.cpp index 3a48711..fa1f51e 100644 --- a/modules/stitching/src/matchers.cpp +++ b/modules/stitching/src/matchers.cpp @@ -44,10 +44,7 @@ using namespace cv; using namespace cv::detail; - -#ifdef HAVE_OPENCV_GPU using namespace cv::gpu; -#endif #ifdef HAVE_OPENCV_NONFREE #include "opencv2/nonfree.hpp" @@ -132,7 +129,7 @@ private: float match_conf_; }; -#ifdef HAVE_OPENCV_GPU +#ifdef HAVE_OPENCV_GPUFEATURES2D class GpuMatcher : public FeaturesMatcher { public: @@ -207,7 +204,7 @@ void CpuMatcher::match(const ImageFeatures &features1, const ImageFeatures &feat LOG("1->2 & 2->1 matches: " << matches_info.matches.size() << endl); } -#ifdef HAVE_OPENCV_GPU +#ifdef HAVE_OPENCV_GPUFEATURES2D void GpuMatcher::match(const ImageFeatures &features1, const ImageFeatures &features2, MatchesInfo& matches_info) { matches_info.matches.clear(); @@ -435,7 +432,7 @@ void OrbFeaturesFinder::find(const Mat &image, ImageFeatures &features) } } -#if defined(HAVE_OPENCV_NONFREE) && defined(HAVE_OPENCV_GPU) +#ifdef HAVE_OPENCV_NONFREE SurfFeaturesFinderGpu::SurfFeaturesFinderGpu(double hess_thresh, int num_octaves, int num_layers, int num_octaves_descr, int num_layers_descr) { @@ -536,14 +533,18 @@ void FeaturesMatcher::operator ()(const std::vector &features, st BestOf2NearestMatcher::BestOf2NearestMatcher(bool try_use_gpu, float match_conf, int num_matches_thresh1, int num_matches_thresh2) { -#ifdef HAVE_OPENCV_GPU + (void)try_use_gpu; + +#ifdef HAVE_OPENCV_GPUFEATURES2D if (try_use_gpu && getCudaEnabledDeviceCount() > 0) + { impl_ = new GpuMatcher(match_conf); + } else -#else - (void)try_use_gpu; #endif + { impl_ = new CpuMatcher(match_conf); + } is_thread_safe_ = impl_->isThreadSafe(); num_matches_thresh1_ = num_matches_thresh1; diff --git a/modules/stitching/src/precomp.hpp b/modules/stitching/src/precomp.hpp index 9e056bc..d802d0d 100644 --- a/modules/stitching/src/precomp.hpp +++ b/modules/stitching/src/precomp.hpp @@ -66,11 +66,25 @@ #include "opencv2/imgproc.hpp" #include "opencv2/features2d.hpp" #include "opencv2/calib3d.hpp" + +#ifdef HAVE_OPENCV_GPUARITHM +# include "opencv2/gpuarithm.hpp" +#endif + +#ifdef HAVE_OPENCV_GPUWARPING +# include "opencv2/gpuwarping.hpp" +#endif + +#ifdef HAVE_OPENCV_GPUFEATURES2D +# include "opencv2/gpufeatures2d.hpp" +#endif + #ifdef HAVE_OPENCV_GPU # include "opencv2/gpu.hpp" -# ifdef HAVE_OPENCV_NONFREE -# include "opencv2/nonfree/gpu.hpp" -# endif +#endif + +#ifdef HAVE_OPENCV_NONFREE +# include "opencv2/nonfree/gpu.hpp" #endif #include "../../imgproc/src/gcgraph.hpp" diff --git a/modules/stitching/src/stitcher.cpp b/modules/stitching/src/stitcher.cpp index 72f6e67..cef9fe4 100644 --- a/modules/stitching/src/stitcher.cpp +++ b/modules/stitching/src/stitcher.cpp @@ -59,7 +59,7 @@ Stitcher Stitcher::createDefault(bool try_use_gpu) #ifdef HAVE_OPENCV_GPU if (try_use_gpu && gpu::getCudaEnabledDeviceCount() > 0) { -#if defined(HAVE_OPENCV_NONFREE) +#ifdef HAVE_OPENCV_NONFREE stitcher.setFeaturesFinder(new detail::SurfFeaturesFinderGpu()); #else stitcher.setFeaturesFinder(new detail::OrbFeaturesFinder()); diff --git a/modules/stitching/src/warpers.cpp b/modules/stitching/src/warpers.cpp index 0df91ed..1082b42 100644 --- a/modules/stitching/src/warpers.cpp +++ b/modules/stitching/src/warpers.cpp @@ -210,7 +210,7 @@ void SphericalWarper::detectResultRoi(Size src_size, Point &dst_tl, Point &dst_b } -#ifdef HAVE_OPENCV_GPU +#ifdef HAVE_OPENCV_GPUWARPING Rect PlaneWarperGpu::buildMaps(Size src_size, const Mat &K, const Mat &R, gpu::GpuMat &xmap, gpu::GpuMat &ymap) { return buildMaps(src_size, K, R, Mat::zeros(3, 1, CV_32F), xmap, ymap); diff --git a/samples/cpp/stitching_detailed.cpp b/samples/cpp/stitching_detailed.cpp index e79386d..5ee7918 100644 --- a/samples/cpp/stitching_detailed.cpp +++ b/samples/cpp/stitching_detailed.cpp @@ -356,7 +356,7 @@ int main(int argc, char* argv[]) Ptr finder; if (features_type == "surf") { -#if defined(HAVE_OPENCV_NONFREE) && defined(HAVE_OPENCV_GPU) +#ifdef HAVE_OPENCV_NONFREE if (try_gpu && gpu::getCudaEnabledDeviceCount() > 0) finder = new SurfFeaturesFinderGpu(); else @@ -544,7 +544,7 @@ int main(int argc, char* argv[]) // Warp images and their masks Ptr warper_creator; -#ifdef HAVE_OPENCV_GPU +#ifdef HAVE_OPENCV_GPUWARPING if (try_gpu && gpu::getCudaEnabledDeviceCount() > 0) { if (warp_type == "plane") warper_creator = new cv::PlaneWarperGpu(); -- 2.7.4