OpenCV之Rect_

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
};

    二维矩形的模板类,包含以下参数:
    左上角的坐标值、矩形的宽和高
    
    OpenCV是设定矩形的上边界以及左边界是被包含,而右边界以及下边界是不被包含的,所以执行Rect_::contains函数时,只有在满足下面这个条件才会返回true:
    x <= pt.x < x + width, y<= pt.y < y + height

    在设置ROI的时候,函数的实现为:
    for(int y = roi.y; y < roi.y + rect.height; y++)
{
    for(int x = roi.x; x< roi.x+rect.width; x++)
{
    //...
}
}

与Rect_有关的运算:
    rect = rect +- point (将矩形的左上点移动到point处)
    rect = rect +- size(将矩形的长宽增加或减少相应的值,结果可以是负值)
    rect += point, rect -= point, rect += size, rect -= size (同上)
    rect = rect1 & rect2 (交集)
    rect = rect1 | rect2 (获取能够同时包含rect1和rect2的最小矩形)
    rect &= rect1,  rect |= rect1 (同上)
    rect == rect1, rect != rect1(比较)
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值