template class CV_EXPORTS Rect_
// C++ code:
public:
typedef _Tp value_type;
//! various constructors
Rect_();
Rect_(_Tp _x, _Tp _y, _Tp _width, _Tp _height);
Rect_(const Rect_& r);
Rect_(const CvRect& r);
Rect_(const Point_& org, const Size_& sz);
Rect_(const Point_& pt1, const Point_& pt2);
Rect_& operator = (const Rect_& r);
//! the top-left corner
Point_ tl() const;
//! the bottom-right corner
Point_ br() const;
//! size (width, height) of the rectangle
Size_ size() const;
//! area (width*height) of the rectangle
_Tp area() const;
//! conversion to another data type
template operator Rect_() const;
//! conversion to the old-style CvRect
operator CvRect() const;
//! checks whether the rectangle contains the point
bool contains(const Point_& pt) const;
_Tp x, y, width, height; //< the top-left corner, as well as width and height
of the rectangle
};
Template class for 2D rectangles, described by the following parameters:
- Coordinates of the top-left corner. This is a default interpretation
of
Rect_.x
and Rect_.y
in OpenCV. Though, in your
algorithms you may count x
and y
from the
bottom-left corner.
- Rectangle width and height.
OpenCV typically assumes that the top and left boundary of the rectangle are
inclusive, while the right and bottom boundaries are not. For example, the
method Rect_.contains
returns true
if
x
Virtually every loop over an imageROI in OpenCV (where ROI is specified by
Rect_
) is implemented as:
// C++ code:
for(int y = roi.y; y < roi.y + rect.height; y++)
for(int x = roi.x; x < roi.x + rect.width; x++)
//...
In addition to the class members, the following operations on rectangles are
implemented:
- rect = rect +- point (shifting a rectangle by a certain
offset)
- rect = rect +- size (expanding or shrinking a rectangle by a
certain amount)
-
rect += point, rect -= point, rect += size, rect -= size
(augmenting operations)
-
rect = rect1 & rect2
(rectangle intersection)
-
rect = rect1 | rect2
(minimum area rectangle containing
rect2
and rect3
)
-
rect &= rect1, rect |= rect1
(and the corresponding
augmenting operations)
-
rect == rect1, rect != rect1
(rectangle comparison)
This is an example how the partial ordering on rectangles can be established
(rect1subseteq rect2):
// C++ code:
template inline bool
operator & r1, const Rect_& r2)
return (r1 & r2) == r1;
For your convenience, the Rect_<>
alias is available:
typedef Rect_ Rect;