stitching module fixes

This commit is contained in:
Vladislav Vinogradov 2013-04-18 13:28:30 +04:00
parent 033dd77504
commit fdeec6896c
10 changed files with 48 additions and 31 deletions

View File

@ -1,3 +1,4 @@
set(the_description "Images stitching") 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)

View File

@ -47,8 +47,9 @@
#include "opencv2/features2d.hpp" #include "opencv2/features2d.hpp"
#include "opencv2/opencv_modules.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 #endif
namespace cv { 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 class CV_EXPORTS SurfFeaturesFinderGpu : public FeaturesFinder
{ {
public: public:

View File

@ -44,11 +44,9 @@
#define __OPENCV_STITCHING_WARPERS_HPP__ #define __OPENCV_STITCHING_WARPERS_HPP__
#include "opencv2/core.hpp" #include "opencv2/core.hpp"
#include "opencv2/core/gpumat.hpp"
#include "opencv2/imgproc.hpp" #include "opencv2/imgproc.hpp"
#include "opencv2/opencv_modules.hpp" #include "opencv2/opencv_modules.hpp"
#ifdef HAVE_OPENCV_GPU
# include "opencv2/gpu.hpp"
#endif
namespace cv { namespace cv {
namespace detail { namespace detail {
@ -329,7 +327,7 @@ public:
}; };
#ifdef HAVE_OPENCV_GPU #ifdef HAVE_OPENCV_GPUWARPING
class CV_EXPORTS PlaneWarperGpu : public PlaneWarper class CV_EXPORTS PlaneWarperGpu : public PlaneWarper
{ {
public: public:

View File

@ -145,7 +145,7 @@ public:
#ifdef HAVE_OPENCV_GPU #ifdef HAVE_OPENCV_GPUWARPING
class PlaneWarperGpu: public WarperCreator class PlaneWarperGpu: public WarperCreator
{ {
public: public:

View File

@ -187,12 +187,14 @@ Rect FeatherBlender::createWeightMaps(const std::vector<Mat> &masks, const std::
MultiBandBlender::MultiBandBlender(int try_gpu, int num_bands, int weight_type) MultiBandBlender::MultiBandBlender(int try_gpu, int num_bands, int weight_type)
{ {
setNumBands(num_bands); setNumBands(num_bands);
#ifdef HAVE_OPENCV_GPU
#if defined(HAVE_OPENCV_GPUARITHM) && defined(HAVE_OPENCV_GPUWARPING)
can_use_gpu_ = try_gpu && gpu::getCudaEnabledDeviceCount(); can_use_gpu_ = try_gpu && gpu::getCudaEnabledDeviceCount();
#else #else
(void)try_gpu; (void) try_gpu;
can_use_gpu_ = false; can_use_gpu_ = false;
#endif #endif
CV_Assert(weight_type == CV_32F || weight_type == CV_16S); CV_Assert(weight_type == CV_32F || weight_type == CV_16S);
weight_type_ = weight_type; weight_type_ = weight_type;
} }
@ -489,7 +491,7 @@ void createLaplacePyr(const Mat &img, int num_levels, std::vector<Mat> &pyr)
void createLaplacePyrGpu(const Mat &img, int num_levels, std::vector<Mat> &pyr) void createLaplacePyrGpu(const Mat &img, int num_levels, std::vector<Mat> &pyr)
{ {
#ifdef HAVE_OPENCV_GPU #if defined(HAVE_OPENCV_GPUARITHM) && defined(HAVE_OPENCV_GPUWARPING)
pyr.resize(num_levels + 1); pyr.resize(num_levels + 1);
std::vector<gpu::GpuMat> gpu_pyr(num_levels + 1); std::vector<gpu::GpuMat> gpu_pyr(num_levels + 1);
@ -529,7 +531,7 @@ void restoreImageFromLaplacePyr(std::vector<Mat> &pyr)
void restoreImageFromLaplacePyrGpu(std::vector<Mat> &pyr) void restoreImageFromLaplacePyrGpu(std::vector<Mat> &pyr)
{ {
#ifdef HAVE_OPENCV_GPU #if defined(HAVE_OPENCV_GPUARITHM) && defined(HAVE_OPENCV_GPUWARPING)
if (pyr.empty()) if (pyr.empty())
return; return;

View File

@ -44,10 +44,7 @@
using namespace cv; using namespace cv;
using namespace cv::detail; using namespace cv::detail;
#ifdef HAVE_OPENCV_GPU
using namespace cv::gpu; using namespace cv::gpu;
#endif
#ifdef HAVE_OPENCV_NONFREE #ifdef HAVE_OPENCV_NONFREE
#include "opencv2/nonfree.hpp" #include "opencv2/nonfree.hpp"
@ -132,7 +129,7 @@ private:
float match_conf_; float match_conf_;
}; };
#ifdef HAVE_OPENCV_GPU #ifdef HAVE_OPENCV_GPUFEATURES2D
class GpuMatcher : public FeaturesMatcher class GpuMatcher : public FeaturesMatcher
{ {
public: 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); 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) void GpuMatcher::match(const ImageFeatures &features1, const ImageFeatures &features2, MatchesInfo& matches_info)
{ {
matches_info.matches.clear(); 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, SurfFeaturesFinderGpu::SurfFeaturesFinderGpu(double hess_thresh, int num_octaves, int num_layers,
int num_octaves_descr, int num_layers_descr) int num_octaves_descr, int num_layers_descr)
{ {
@ -536,14 +533,18 @@ void FeaturesMatcher::operator ()(const std::vector<ImageFeatures> &features, st
BestOf2NearestMatcher::BestOf2NearestMatcher(bool try_use_gpu, float match_conf, int num_matches_thresh1, int num_matches_thresh2) BestOf2NearestMatcher::BestOf2NearestMatcher(bool try_use_gpu, float match_conf, int num_matches_thresh1, int num_matches_thresh2)
{ {
#ifdef HAVE_OPENCV_GPU
if (try_use_gpu && getCudaEnabledDeviceCount() > 0)
impl_ = new GpuMatcher(match_conf);
else
#else
(void)try_use_gpu; (void)try_use_gpu;
#ifdef HAVE_OPENCV_GPUFEATURES2D
if (try_use_gpu && getCudaEnabledDeviceCount() > 0)
{
impl_ = new GpuMatcher(match_conf);
}
else
#endif #endif
{
impl_ = new CpuMatcher(match_conf); impl_ = new CpuMatcher(match_conf);
}
is_thread_safe_ = impl_->isThreadSafe(); is_thread_safe_ = impl_->isThreadSafe();
num_matches_thresh1_ = num_matches_thresh1; num_matches_thresh1_ = num_matches_thresh1;

View File

@ -66,11 +66,25 @@
#include "opencv2/imgproc.hpp" #include "opencv2/imgproc.hpp"
#include "opencv2/features2d.hpp" #include "opencv2/features2d.hpp"
#include "opencv2/calib3d.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 #ifdef HAVE_OPENCV_GPU
# include "opencv2/gpu.hpp" # include "opencv2/gpu.hpp"
# ifdef HAVE_OPENCV_NONFREE #endif
# include "opencv2/nonfree/gpu.hpp"
# endif #ifdef HAVE_OPENCV_NONFREE
# include "opencv2/nonfree/gpu.hpp"
#endif #endif
#include "../../imgproc/src/gcgraph.hpp" #include "../../imgproc/src/gcgraph.hpp"

View File

@ -59,7 +59,7 @@ Stitcher Stitcher::createDefault(bool try_use_gpu)
#ifdef HAVE_OPENCV_GPU #ifdef HAVE_OPENCV_GPU
if (try_use_gpu && gpu::getCudaEnabledDeviceCount() > 0) if (try_use_gpu && gpu::getCudaEnabledDeviceCount() > 0)
{ {
#if defined(HAVE_OPENCV_NONFREE) #ifdef HAVE_OPENCV_NONFREE
stitcher.setFeaturesFinder(new detail::SurfFeaturesFinderGpu()); stitcher.setFeaturesFinder(new detail::SurfFeaturesFinderGpu());
#else #else
stitcher.setFeaturesFinder(new detail::OrbFeaturesFinder()); stitcher.setFeaturesFinder(new detail::OrbFeaturesFinder());

View File

@ -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) 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); return buildMaps(src_size, K, R, Mat::zeros(3, 1, CV_32F), xmap, ymap);

View File

@ -356,7 +356,7 @@ int main(int argc, char* argv[])
Ptr<FeaturesFinder> finder; Ptr<FeaturesFinder> finder;
if (features_type == "surf") if (features_type == "surf")
{ {
#if defined(HAVE_OPENCV_NONFREE) && defined(HAVE_OPENCV_GPU) #ifdef HAVE_OPENCV_NONFREE
if (try_gpu && gpu::getCudaEnabledDeviceCount() > 0) if (try_gpu && gpu::getCudaEnabledDeviceCount() > 0)
finder = new SurfFeaturesFinderGpu(); finder = new SurfFeaturesFinderGpu();
else else
@ -544,7 +544,7 @@ int main(int argc, char* argv[])
// Warp images and their masks // Warp images and their masks
Ptr<WarperCreator> warper_creator; Ptr<WarperCreator> warper_creator;
#ifdef HAVE_OPENCV_GPU #ifdef HAVE_OPENCV_GPUWARPING
if (try_gpu && gpu::getCudaEnabledDeviceCount() > 0) if (try_gpu && gpu::getCudaEnabledDeviceCount() > 0)
{ {
if (warp_type == "plane") warper_creator = new cv::PlaneWarperGpu(); if (warp_type == "plane") warper_creator = new cv::PlaneWarperGpu();