我是靠谱客的博主 自由招牌,这篇文章主要介绍Rect函数,现在分享给大家,希望可以做个参考。

了解opencv里面的函数,第一步必须是看官网上给出的文档。下面给出Rect类的c++使用。


class Rect_

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
template<typename _Tp> class CV_EXPORTS Rect_ { 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_<_Tp>& org, const Size_<_Tp>& sz); Rect_(const Point_<_Tp>& pt1, const Point_<_Tp>& pt2); Rect_& operator = ( const Rect_& r ); //! the top-left corner Point_<_Tp> tl() const; //! the bottom-right corner Point_<_Tp> br() const; //! size (width, height) of the rectangle Size_<_Tp> size() const; //! area (width*height) of the rectangle _Tp area() const; //! conversion to another data type template<typename _Tp2> operator Rect_<_Tp2>() const; //! conversion to the old-style CvRect operator CvRect() const; //! checks whether the rectangle contains the point bool contains(const Point_<_Tp>& 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  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:

复制代码
1
2
3
4
5
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:

  • 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 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 (rect1 subseteq rect2):

复制代码
1
2
3
4
5
template<typename _Tp> inline bool operator <= (const Rect_<_Tp>& r1, const Rect_<_Tp>& r2) { return (r1 & r2) == r1; }

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

typedef Rect_<int> Rect;

在模板类中公有中,给出了许多的构造函数,可以任选一种作为你使用的函数。我常用的就是Rect(a,b,c,d)。(a,b)表示矩形区域的左上角坐标,(c,d)则表示矩形区域的右下角坐标。

最后

以上就是自由招牌最近收集整理的关于Rect函数的全部内容,更多相关Rect函数内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(61)

评论列表共有 0 条评论

立即
投稿
返回
顶部