diff --git a/modules/stitching/include/opencv2/stitching/detail/exposure_compensate.hpp b/modules/stitching/include/opencv2/stitching/detail/exposure_compensate.hpp index bb958a41e6..d7fb5e705f 100644 --- a/modules/stitching/include/opencv2/stitching/detail/exposure_compensate.hpp +++ b/modules/stitching/include/opencv2/stitching/detail/exposure_compensate.hpp @@ -158,12 +158,14 @@ class CV_EXPORTS_W BlocksCompensator : public ExposureCompensator { public: BlocksCompensator(int bl_width=32, int bl_height=32, int nr_feeds=1) - : bl_width_(bl_width), bl_height_(bl_height), nr_feeds_(nr_feeds) {} + : bl_width_(bl_width), bl_height_(bl_height), nr_feeds_(nr_feeds), nr_gain_filtering_iterations_(2) {} CV_WRAP void apply(int index, Point corner, InputOutputArray image, InputArray mask) CV_OVERRIDE; CV_WRAP void getMatGains(CV_OUT std::vector& umv) CV_OVERRIDE; CV_WRAP void setMatGains(std::vector& umv) CV_OVERRIDE; CV_WRAP void setNrFeeds(int nr_feeds) { nr_feeds_ = nr_feeds; } CV_WRAP int getNrFeeds() { return nr_feeds_; } + CV_WRAP void setNrGainsFilteringIterations(int nr_iterations) { nr_gain_filtering_iterations_ = nr_iterations; } + CV_WRAP int getNrGainsFilteringIterations() const { return nr_gain_filtering_iterations_; } protected: template @@ -177,6 +179,7 @@ private: int bl_width_, bl_height_; std::vector gain_maps_; int nr_feeds_; + int nr_gain_filtering_iterations_; }; /** @brief Exposure compensator which tries to remove exposure related artifacts by adjusting image block diff --git a/modules/stitching/src/exposure_compensate.cpp b/modules/stitching/src/exposure_compensate.cpp index 5b5a50196a..eed074e03f 100644 --- a/modules/stitching/src/exposure_compensate.cpp +++ b/modules/stitching/src/exposure_compensate.cpp @@ -412,8 +412,8 @@ void BlocksCompensator::feed(const std::vector &corners, const std::vecto UMat gain_map = getGainMap(compensator, bl_idx, bl_per_img); bl_idx += bl_per_img.width*bl_per_img.height; - sepFilter2D(gain_map, gain_map, CV_32F, ker, ker); - sepFilter2D(gain_map, gain_map, CV_32F, ker, ker); + for (int i=0; i