Opencv视觉学习--Rect、RotatedRect类与boundingRect( )、minAreaRect( )、fitEllipse( )函数

对于刚开始学习Opencv的朋友们,查找资料是自学最好的方式。
这一篇博客,我将介绍Opencv中Rect、RotatedRect类与boundingRect( )、minAreaRect( )、fitEllipse( )函数,如有问题或建议可留言于我,谢谢!
更多资料请点击:我的目录

Rect类包含了函数boundingRect( )返回的结果

boundingRect( )函数返回参数如下:

rect.area(); //返回rect的面积
rect.size(); //返回rect的尺寸
rect.tl(); //返回rect的左上顶点的坐标
rect.br(); //返回rect的右下顶点的坐标
rect.width(); //返回rect的宽度
rect.height(); //返回rect的高度
rect.contains(Point(x, y)); //返回布尔变量,判断rect是否包含Point(x, y)点

RotatedRect类包含了最小外包矩形函数minAreaRect( )和椭圆拟合函数fitEllipse( )返回的结果。RotatedRect类是一个存储旋转矩形的类,通常用来存储最小外包矩形函数minAreaRect( )和椭圆拟合函数fitEllipse( )返回的结果。存储的值,完全取决在于函数的返回。

class CV_EXPORTS RotatedRect 
{ 
public: 
//构造函数 
RotatedRect(); 
RotatedRect(const Point2f& center, const Size2f& size, float angle); 
RotatedRect(const CvBox2D& box);
 
//!返回矩形的4个顶点 
void points(Point2f pts[]) const; 
//返回包含旋转矩形的最小矩形 
Rect boundingRect() const; 
//!转换到旧式的cvbox2d结构 
operator CvBox2D() const; 
 
Point2f center; //矩形的质心 
Size2f size; //矩形的边长 
float angle; //旋转角度,当角度为0、90、180、270等时,矩形就成了一个直立的矩形 
};

OpenCV中,坐标的原点在左上角,与x轴平行的方向为角度为0,逆时针旋转角度为负,顺时针旋转角度为正,minAreaRect( )函数和fitEllipse( )函数返回值不太一样

minAreaRect( )函数返回参数如图:
角点顺序是固定以最下面的点为P[0],顺时针依次递增编号的。将水平轴逆时针旋转,最先与水平轴平行的边作为宽width,另外一条边则为高height,并非长的就是height,短的就是width。而角度则直接取最先与水平轴平行的边与水平轴的夹角,取值范围[-90~0]。
在这里插入图片描述

fitEllipse( )函数返回参数如图:
角度参数angle 是椭圆中心center发出的平行于x轴的射线,顺时针旋转,与椭圆短轴的夹角,取值范围 [ 0 ~ 180 ]。椭圆的短轴为参数宽width,长轴为参数长height。

在这里插入图片描述

示例程序:

		vector<vector<Point>>contours;
   	vector<Vec4i>hierarchy;
        findContours(bin_img,contours,hierarchy,RETR_TREE,CHAIN_APPROX_SIMPLE,Point(0,0));

        vector<RotatedRect>minRects(contours.size());
        vector<Rect> boundRect(contours.size());

        for (uint i = 0; i < contours.size(); ++i)
        {
            boundRect[i] = boundingRect(Mat(contours[i]));

            minRects[i] = minAreaRect(Mat(contours[i]));
        }

更多资料请点击:我的目录

发布了75 篇原创文章 · 获赞 35 · 访问量 5941

猜你喜欢

转载自blog.csdn.net/weixin_43793181/article/details/103810979