43
#ifndef OPENCV_STITCHING_SEAM_FINDERS_HPP
 
44
#define OPENCV_STITCHING_SEAM_FINDERS_HPP
 
47
#include "opencv2/core.hpp"
 
48
#include "opencv2/opencv_modules.hpp"
 
62
enum
{ NO, VORONOI_SEAM, DP_SEAM };
 
69
CV_WRAP
virtual
void
find(
const
std::vector<UMat> &src,
const
std::vector<Point> &corners,
 
70
CV_IN_OUT std::vector<UMat> &masks) = 0;
 
79
CV_WRAP
void
find(
const
std::vector<UMat>&,
const
std::vector<Point>&, CV_IN_OUT std::vector<UMat>&) CV_OVERRIDE {}
 
87
CV_WRAP
virtual
void
find(
const
std::vector<UMat> &src,
const
std::vector<Point> &corners,
 
88
CV_IN_OUT std::vector<UMat> &masks) CV_OVERRIDE;
 
100
std::vector<UMat> images_;
 
101
std::vector<Size> sizes_;
 
102
std::vector<Point> corners_;
 
103
std::vector<UMat> masks_;
 
111
CV_WRAP
virtual
void
find(
const
std::vector<UMat> &src,
const
std::vector<Point> &corners,
 
112
CV_IN_OUT std::vector<UMat> &masks) CV_OVERRIDE;
 
113
virtual
void
find(
const
std::vector<Size> &size,
const
std::vector<Point> &corners,
 
114
std::vector<UMat> &masks);
 
116
void
findInPair(
size_t
first,
size_t
second,
Rect
roi) CV_OVERRIDE;
 
123
enum
CostFunction { COLOR, COLOR_GRAD };
 
128
CostFunction costFunction()
const
{
return
costFunc_; }
 
129
void
setCostFunction(CostFunction val) { costFunc_ = val; }
 
130
CV_WRAP
void
setCostFunction(String val);
 
132
virtual
void
find(
const
std::vector<UMat> &src,
const
std::vector<Point> &corners,
 
133
std::vector<UMat> &masks) CV_OVERRIDE;
 
138
FIRST = 1, SECOND = 2, INTERS = 4,
 
139
INTERS_FIRST = INTERS | FIRST,
 
140
INTERS_SECOND = INTERS | SECOND
 
146
ImagePairLess(
const
std::vector<Mat> &images,
const
std::vector<Point> &corners)
 
147
: src_(&images[0]), corners_(&corners[0]) {}
 
149
bool
operator() (
const
std::pair<size_t, size_t> &l,
const
std::pair<size_t, size_t> &r)
const
 
151
Point
c1 = corners_[l.first] +
Point(src_[l.first].cols / 2, src_[l.first].rows / 2);
 
152
Point
c2 = corners_[l.second] +
Point(src_[l.second].cols / 2, src_[l.second].rows / 2);
 
153
int
d1 = (c1 - c2).dot(c1 - c2);
 
155
c1 = corners_[r.first] +
Point(src_[r.first].cols / 2, src_[r.first].rows / 2);
 
156
c2 = corners_[r.second] +
Point(src_[r.second].cols / 2, src_[r.second].rows / 2);
 
157
int
d2 = (c1 - c2).dot(c1 - c2);
 
164
const
Point
*corners_;
 
170
ClosePoints(
int
minDist) : minDist_(minDist) {}
 
172
bool
operator() (
const
Point
&p1,
const
Point
&p2)
const
 
174
int
dist2 = (p1.
x-p2.
x) * (p1.
x-p2.
x) + (p1.
y-p2.
y) * (p1.
y-p2.
y);
 
175
return
dist2 < minDist_ * minDist_;
 
185
void
findComponents();
 
189
void
resolveConflicts(
 
192
void
computeGradients(
const
Mat
&image1,
const
Mat
&image2);
 
194
bool
hasOnlyOneNeighbor(
int
comp);
 
196
bool
closeToContour(
int
y,
int
x,
const
Mat_<uchar>
&contourMask);
 
198
bool
getSeamTips(
int
comp1,
int
comp2,
Point
&p1,
Point
&p2);
 
206
Point
p1,
Point
p2, std::vector<Point> &seam,
bool
&isHorizontal);
 
208
void
updateLabelsUsingSeam(
 
209
int
comp1,
int
comp2,
const
std::vector<Point> &seam,
bool
isHorizontalSeam);
 
211
CostFunction costFunc_;
 
214
Point
unionTl_, unionBr_;
 
224
std::vector<ComponentState> states_;
 
225
std::vector<Point> tls_, brs_;
 
226
std::vector<std::vector<Point> > contours_;
 
227
std::set<std::pair<int, int> > edges_;
 
235
enum
CostType { COST_COLOR, COST_COLOR_GRAD };
 
244
float
bad_region_penalty = 1000.f);
 
246
float
bad_region_penalty = 1000.f);
 
250
CV_WRAP
void
find(
const
std::vector<UMat> &src,
const
std::vector<Point> &corners,
 
251
std::vector<UMat> &masks) CV_OVERRIDE;
 
260
#ifdef HAVE_OPENCV_CUDALEGACY
 
264
GraphCutSeamFinderGpu(
int
cost_type = COST_COLOR_GRAD,
float
terminal_cost = 10000.f,
 
265
float
bad_region_penalty = 1000.f)
 
266
: cost_type_(cost_type), terminal_cost_(terminal_cost),
 
267
bad_region_penalty_(bad_region_penalty) {}
 
269
void
find(
const
std::vector<cv::UMat> &src,
const
std::vector<cv::Point> &corners,
 
270
std::vector<cv::UMat> &masks) CV_OVERRIDE;
 
271
void
findInPair(
size_t
first,
size_t
second,
Rect
roi) CV_OVERRIDE;
 
279
std::vector<Mat> dx_, dy_;
 
281
float
terminal_cost_;
 
282
float
bad_region_penalty_;
 
Template matrix class derived from Mat
Definition:
mat.hpp:2199
 
n-dimensional dense array class
Definition:
mat.hpp:802
 
_Tp y
y coordinate of the point
Definition:
core/types.hpp:187
 
_Tp x
x coordinate of the point
Definition:
core/types.hpp:186
 
Template class for 2D rectangles
Definition:
core/types.hpp:421
 
Template class for specifying the size of an image or rectangle.
Definition:
core/types.hpp:316
 
Definition:
seam_finders.hpp:121
 
Base class for all minimum graph-cut-based seam estimators.
Definition:
seam_finders.hpp:233
 
Minimum graph cut-based seam estimator. See details in  .
Definition:
seam_finders.hpp:241
 
Stub seam estimator which does nothing.
Definition:
seam_finders.hpp:77
 
Base class for all pairwise seam estimators.
Definition:
seam_finders.hpp:85
 
virtual void findInPair(size_t first, size_t second, Rect roi)=0
Resolves masks intersection of two specified images in the given ROI.
 
Base class for a seam estimator.
Definition:
seam_finders.hpp:59
 
Voronoi diagram-based seam estimator.
Definition:
seam_finders.hpp:109
 
"black box" representation of the file storage associated with a file on disk.
Definition:
aruco.hpp:75
 
Definition:
cvstd_wrapper.hpp:74