opencv/modules/stitching/doc/blenders.rst

122 lines
3.2 KiB
ReStructuredText
Raw Normal View History

2012-01-19 17:43:13 +08:00
Image Blenders
==============
.. highlight:: cpp
detail::Blender
---------------
.. ocv:class:: detail::Blender
Base class for all blenders. ::
class CV_EXPORTS Blender
{
public:
virtual ~Blender() {}
enum { NO, FEATHER, MULTI_BAND };
static Ptr<Blender> createDefault(int type, bool try_gpu = false);
void prepare(const std::vector<Point> &corners, const std::vector<Size> &sizes);
virtual void prepare(Rect dst_roi);
virtual void feed(const Mat &img, const Mat &mask, Point tl);
virtual void blend(Mat &dst, Mat &dst_mask);
protected:
Mat dst_, dst_mask_;
Rect dst_roi_;
};
2012-01-26 21:28:04 +08:00
detail::Blender::prepare
------------------------
Prepares the blender for blending.
.. ocv:function:: void detail::Blender::prepare(const std::vector<Point> &corners, const std::vector<Size> &sizes)
:param corners: Source images top-left corners
:param sizes: Source image sizes
detail::Blender::feed
---------------------
Processes the image.
.. ocv:function:: void detail::Blender::feed(const Mat &img, const Mat &mask, Point tl)
:param img: Source image
:param mask: Source image masks
:param tl: Source image top-left corners
detail::Blender::blend
----------------------
Blends and returns the final pano.
.. ocv:function:: void detail::Blender::blend(Mat &dst, Mat &dst_mask)
:param dst: Final pano
:param dst_mask: Final pano mask
2012-01-19 17:43:13 +08:00
detail::FeatherBlender
----------------------
.. ocv:class:: detail::FeatherBlender
Simple blender which mixes images at its borders. ::
class CV_EXPORTS FeatherBlender : public Blender
{
public:
FeatherBlender(float sharpness = 0.02f) { setSharpness(sharpness); }
float sharpness() const { return sharpness_; }
void setSharpness(float val) { sharpness_ = val; }
void prepare(Rect dst_roi);
void feed(const Mat &img, const Mat &mask, Point tl);
void blend(Mat &dst, Mat &dst_mask);
// Creates weight maps for fixed set of source images by their masks and top-left corners.
// Final image can be obtained by simple weighting of the source images.
Rect createWeightMaps(const std::vector<Mat> &masks, const std::vector<Point> &corners,
std::vector<Mat> &weight_maps);
private:
float sharpness_;
Mat weight_map_;
Mat dst_weight_map_;
};
.. seealso:: :ocv:class:`detail::Blender`
detail::MultiBandBlender
------------------------
.. ocv:class:: detail::MultiBandBlender
Blender which uses multi-band blending algorithm (see [BA83]_). ::
class CV_EXPORTS MultiBandBlender : public Blender
{
public:
MultiBandBlender(int try_gpu = false, int num_bands = 5);
int numBands() const { return actual_num_bands_; }
void setNumBands(int val) { actual_num_bands_ = val; }
void prepare(Rect dst_roi);
void feed(const Mat &img, const Mat &mask, Point tl);
void blend(Mat &dst, Mat &dst_mask);
private:
int actual_num_bands_, num_bands_;
std::vector<Mat> dst_pyr_laplace_;
std::vector<Mat> dst_band_weights_;
Rect dst_roi_final_;
bool can_use_gpu_;
};
.. seealso:: :ocv:class:`detail::Blender`