OpenCV 4.10.0-dev
Open Source Computer Vision
Loading...
Searching...
No Matches
cv::Rect_< _Tp > Class Template Reference

Template class for 2D rectangles. More...

#include <opencv2/core/types.hpp>

Collaboration diagram for cv::Rect_< _Tp >:

Public Types

typedef _Tp value_type
 

Public Member Functions

 Rect_ ()
 default constructor
 
 Rect_ (_Tp _x, _Tp _y, _Tp _width, _Tp _height)
 
 Rect_ (const Point_< _Tp > &org, const Size_< _Tp > &sz)
 
 Rect_ (const Point_< _Tp > &pt1, const Point_< _Tp > &pt2)
 
 Rect_ (const Rect_ &r)=default
 
 Rect_ (Rect_ &&r) CV_NOEXCEPT=default
 
_Tp area () const
 area (width*height) of the rectangle
 
Point_< _Tpbr () const
 the bottom-right corner
 
template<typename _Tp2 >
bool contains (const Point_< _Tp2 > &pt) const
 checks whether the rectangle contains the point
 
bool empty () const
 true if empty
 
template<typename _Tp2 >
 operator Rect_< _Tp2 > () const
 conversion to another data type
 
Rect_operator= (const Rect_ &r)=default
 
Rect_operator= (Rect_ &&r) CV_NOEXCEPT=default
 
Size_< _Tpsize () const
 size (width, height) of the rectangle
 
Point_< _Tptl () const
 the top-left corner
 

Public Attributes

_Tp height
 height of the rectangle
 
_Tp width
 width of the rectangle
 
_Tp x
 x coordinate of the top-left corner
 
_Tp y
 y coordinate of the top-left corner
 

Detailed Description

template<typename _Tp>
class cv::Rect_< _Tp >

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 \leq pt.x < x+width, y \leq pt.y < y+height\]

Virtually every loop over an image ROI in OpenCV (where ROI is specified by Rect_<int> ) is implemented as:

for(int y = roi.y; y < roi.y + roi.height; y++)
for(int x = roi.x; x < roi.x + roi.width; x++)
{
// ...
}
_Tp x
x coordinate of the top-left corner
Definition types.hpp:487
_Tp y
y coordinate of the top-left corner
Definition types.hpp:488

In addition to the class members, the following operations on rectangles are implemented:

  • \(\texttt{rect} = \texttt{rect} \pm \texttt{point}\) (shifting a rectangle by a certain offset)
  • \(\texttt{rect} = \texttt{rect} \pm \texttt{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 rect1 and rect2 )
  • 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 (rect1 \(\subseteq\) rect2):

template<typename _Tp> inline bool
operator <= (const Rect_<_Tp>& r1, const Rect_<_Tp>& r2)
{
return (r1 & r2) == r1;
}
Template class for 2D rectangles.
Definition types.hpp:444
cv::GMat operator<=(const cv::GMat &lhs, const cv::GMat &rhs)

For your convenience, the Rect_<> alias is available: cv::Rect

Examples
samples/cpp/camshiftdemo.cpp, samples/cpp/facedetect.cpp, samples/cpp/falsecolor.cpp, samples/cpp/ffilldemo.cpp, samples/cpp/grabcut.cpp, samples/cpp/peopledetect.cpp, samples/cpp/stitching.cpp, samples/cpp/stitching_detailed.cpp, samples/cpp/train_HOG.cpp, and samples/dnn/object_detection.cpp.

Member Typedef Documentation

◆ value_type

template<typename _Tp >
_Tp cv::Rect_< _Tp >::value_type

Constructor & Destructor Documentation

◆ Rect_() [1/6]

template<typename _Tp >
cv::Rect_< _Tp >::Rect_ ( )

default constructor

◆ Rect_() [2/6]

template<typename _Tp >
cv::Rect_< _Tp >::Rect_ ( _Tp _x,
_Tp _y,
_Tp _width,
_Tp _height )

◆ Rect_() [3/6]

template<typename _Tp >
cv::Rect_< _Tp >::Rect_ ( const Rect_< _Tp > & r)
default

◆ Rect_() [4/6]

template<typename _Tp >
cv::Rect_< _Tp >::Rect_ ( Rect_< _Tp > && r)
default

◆ Rect_() [5/6]

template<typename _Tp >
cv::Rect_< _Tp >::Rect_ ( const Point_< _Tp > & org,
const Size_< _Tp > & sz )

◆ Rect_() [6/6]

template<typename _Tp >
cv::Rect_< _Tp >::Rect_ ( const Point_< _Tp > & pt1,
const Point_< _Tp > & pt2 )

Member Function Documentation

◆ area()

template<typename _Tp >
_Tp cv::Rect_< _Tp >::area ( ) const

area (width*height) of the rectangle

Examples
samples/cpp/camshiftdemo.cpp.

◆ br()

template<typename _Tp >
Point_< _Tp > cv::Rect_< _Tp >::br ( ) const

the bottom-right corner

Examples
samples/cpp/peopledetect.cpp.

◆ contains()

template<typename _Tp >
template<typename _Tp2 >
bool cv::Rect_< _Tp >::contains ( const Point_< _Tp2 > & pt) const
inline

checks whether the rectangle contains the point

Warning
After OpenCV 4.11.0, when calling Rect.contains() with cv::Point2f / cv::Point2d point, point should not convert/round to int.
Rect_<int> r(0,0,500,500); Point_<float> pt(250.0f, 499.9f);
r.contains(pt) returns false.(OpenCV 4.10.0 or before)
r.contains(pt) returns true. (OpenCV 4.11.0 or later)
Template class for 2D points specified by its coordinates x and y.
Definition types.hpp:163

◆ empty()

template<typename _Tp >
bool cv::Rect_< _Tp >::empty ( ) const

true if empty

◆ operator Rect_< _Tp2 >()

template<typename _Tp >
template<typename _Tp2 >
cv::Rect_< _Tp >::operator Rect_< _Tp2 > ( ) const

conversion to another data type

◆ operator=() [1/2]

template<typename _Tp >
Rect_ & cv::Rect_< _Tp >::operator= ( const Rect_< _Tp > & r)
default

◆ operator=() [2/2]

template<typename _Tp >
Rect_ & cv::Rect_< _Tp >::operator= ( Rect_< _Tp > && r)
default

◆ size()

template<typename _Tp >
Size_< _Tp > cv::Rect_< _Tp >::size ( ) const

size (width, height) of the rectangle

Examples
samples/cpp/stitching_detailed.cpp.

◆ tl()

template<typename _Tp >
Point_< _Tp > cv::Rect_< _Tp >::tl ( ) const

Member Data Documentation

◆ height

◆ width

◆ x

◆ y


The documentation for this class was generated from the following file: