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