mirror of
https://github.com/opencv/opencv.git
synced 2024-12-18 11:28:02 +08:00
stitching module fixes
This commit is contained in:
parent
033dd77504
commit
fdeec6896c
@ -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)
|
||||||
|
|
||||||
|
@ -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:
|
||||||
|
@ -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:
|
||||||
|
@ -145,7 +145,7 @@ public:
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef HAVE_OPENCV_GPU
|
#ifdef HAVE_OPENCV_GPUWARPING
|
||||||
class PlaneWarperGpu: public WarperCreator
|
class PlaneWarperGpu: public WarperCreator
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
@ -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;
|
||||||
|
|
||||||
|
@ -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;
|
||||||
|
@ -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"
|
||||||
|
@ -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());
|
||||||
|
@ -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);
|
||||||
|
@ -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();
|
||||||
|
Loading…
Reference in New Issue
Block a user