Images stitching#

Topics#

Detailed Description#

This figure illustrates the stitching module pipeline implemented in the Stitcher class. Using that class it’s possible to configure/remove some steps, i.e. adjust the stitching pipeline according to the particular needs. All building blocks from the pipeline are available in the detail namespace, one can combine and use them separately.

The implemented stitching pipeline is very similar to the one proposed in [47] .

stitching pipeline

Camera models#

There are currently 2 camera models implemented in stitching pipeline.

Homography model is useful for creating photo panoramas captured by camera, while affine-based model can be used to stitch scans and object captured by specialized devices. Use cv::Stitcher::create to get preconfigured pipeline for one of those models.

Note

Certain detailed settings of cv::Stitcher might not make sense. Especially you should not mix classes implementing affine model and classes implementing Homography model, as they work with different transformations.

Classes#

Functions#

Return

Name

Description

cv::GraphEdge(
int from,
int to,
float weight )

Ptr< Stitcher >

cv::createStitcher(bool try_use_gpu = false)

Ptr< Stitcher >

cv::createStitcherScans(bool try_use_gpu = false)

bool

cv::overlapRoi(
Point tl1,
Point tl2,
Size sz1,
Size sz2,
Rect & roi )

Rect

cv::resultRoi(
const std::vector< Point > & corners,
const std::vector< Size > & sizes )

Rect

cv::resultRoi(
const std::vector< Point > & corners,
const std::vector< UMat > & images )

Rect

cv::resultRoiIntersection(
const std::vector< Point > & corners,
const std::vector< Size > & sizes )

Point

cv::resultTl(const std::vector< Point > & corners)

void

cv::selectRandomSubset(
int count,
int size,
std::vector< int > & subset )

int &

cv::stitchingLogLevel()

Function Documentation#

createStitcher()#

Ptr< Stitcher > cv::createStitcher(bool try_use_gpu = false)

#include <opencv2/stitching.hpp>

Deprecated

use Stitcher::create

createStitcherScans()#

Ptr< Stitcher > cv::createStitcherScans(bool try_use_gpu = false)

#include <opencv2/stitching.hpp>

Deprecated

use Stitcher::create

overlapRoi()#

bool cv::detail::overlapRoi(
Point tl1,
Point tl2,
Size sz1,
Size sz2,
Rect & roi )

#include <opencv2/stitching/detail/util.hpp>

Python:

cv.detail.overlapRoi(tl1, tl2, sz1, sz2, roi) -> retval

resultRoi()#

Rect cv::detail::resultRoi(
const std::vector< Point > & corners,
const std::vector< Size > & sizes )

#include <opencv2/stitching/detail/util.hpp>

Python:

cv.detail.resultRoi(corners, images) -> retval
cv.detail.resultRoi(corners, sizes) -> retval

resultRoi()#

Rect cv::detail::resultRoi(
const std::vector< Point > & corners,
const std::vector< UMat > & images )

#include <opencv2/stitching/detail/util.hpp>

Python:

cv.detail.resultRoi(corners, images) -> retval
cv.detail.resultRoi(corners, sizes) -> retval

resultRoiIntersection()#

Rect cv::detail::resultRoiIntersection(
const std::vector< Point > & corners,
const std::vector< Size > & sizes )

#include <opencv2/stitching/detail/util.hpp>

Python:

cv.detail.resultRoiIntersection(corners, sizes) -> retval

resultTl()#

Point cv::detail::resultTl(const std::vector< Point > & corners)

#include <opencv2/stitching/detail/util.hpp>

Python:

cv.detail.resultTl(corners) -> retval

selectRandomSubset()#

void cv::detail::selectRandomSubset(
int count,
int size,
std::vector< int > & subset )

#include <opencv2/stitching/detail/util.hpp>

Python:

cv.detail.selectRandomSubset(count, size, subset)

stitchingLogLevel()#

int & cv::detail::stitchingLogLevel()

#include <opencv2/stitching/detail/util.hpp>

Python:

cv.detail.stitchingLogLevel() -> retval