Bootstrap

OpenCV中RotatedRect 以及 Rect介绍

最近项目中用到RotatedRect 这里记录一下

1、RotatedRect

//构建一个Mat(200*200)
Mat image(200, 200, CV_8UC3, Scalar(0));  
//设置一个旋转矩形3个参数分别为:质心(矩形中心),矩形长宽100、50 旋转角度:30 (clockwise)
//RotatedRect 函数返回一个旋转矩形对象
RotatedRect rRect = RotatedRect(Point2f(100,100), Size2f(100,50), 30);

Point2f vertices[4];      //定义4个点的数组
rRect.points(vertices);   //将四个点存储到vertices数组中
for (int i = 0; i < 4; i++)
    // 注意Scala中存储顺序 BGR
    line(image, vertices[i], vertices[(i+1)%4], Scalar(0,255,0));
// 返回外接矩形
Rect brect = rRect.boundingRect();
rectangle(image, brect, Scalar(255,0,0));
imshow("rectangles", image);
waitKey(0);

这里写图片描述

2、Rect

Rect rect(x,y,_width,height) // 注意后面两个数值
//一个image: _width=image.cols height=image.height 
rect.area();   //返回矩形面积
rect.tl();     // top-left corner, 返回值为Point_<Tp>类型
rect.br();     // bottom-right corner , 返回值为Point_<Tp>类型
rect.contains(Point(x, y));  //Rect 是否包含Point ,返回bool类型


recta & rectb  //求交集,经常用来防止访问溢出 

实际上,求两个矩形的iou可以用这个自带的函数

cv::Rect fix_left = cv::Rect(x,y,w,h);
cv::Rect fix_right = cv::Rect(a,b,c,d);
float iou = (fix_left & fix_right).area() *1.0/ (fix_left | fix_right).area();
;