1,OpenCV Rect 常用操作符
注意:坐标系是标准的笛卡尔坐标系,X方向向右为正,Y方向向上为正 | |
操作 | 例子 |
默认构造函数 | cv::Rect r |
赋值构造函数 | cv::Rect r2(r1) |
带参数构造函数 | cv::Rect(x,y,w,h) |
原始点和Size构造函数 | cv::Rect(p,sz) |
两个角点构造函数 | cv::Rect(p1,p2) |
成员函数访问 | r.x,r.y,r.width,r.height |
计算面积 | r.erea() |
提取左上角点坐标 | r.tl() |
提取右下角点坐标 | r.br() |
判断点是否在矩阵内 | r.contains(p) |
计算两个矩形的交集 | cv::Rect r3=r1&r2 |
计算最小面积矩阵包含r1和r2 | cv::Rect r3=r1|r2 |
平移矩形,变量为x | cv::Rect r3=r+x |
扩展矩形区域,Size | cv::Rect rs=r+s |
比较两个矩形是否相同 | bool eq=(r1==r2) |
比较两个矩形是否不相同 | bool ne=(r1==r2) |
2,应用的例子
//包含OpenCV的头文件
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace std;
//使用OpenCV的命名空间
using namespace cv;
//Rect 类型操作 类型
int main()
{
//1,默认构造函数
Rect r0;//数据为 0x0 from (0,0)
cout << r0 << endl;
//2,赋值构造函数
Rect r1(0, 0, 1, 1);
Rect r2(r1);//数据为 1x1 from(0,0)
cout << r2 << endl;
//3,带参数的构造函数
Rect r3(0, 1, 2, 3);//数据为 2x3 from (0,1)
cout << r3 << endl;
//4,从原始点和Size 构造函数
Rect r4(Point2f(2, 2), Size(1, 1));
cout << r4 << endl;//数据为1x1 from(2,2);
//5,访问成员函数
Rect r5(1, 2, 3, 4);
cout << r5.x << '\t' << r5.y << '\t' << r5.width << '\t' << r5.height << endl;
//6,提取左上角坐标
cout << r5.tl() << endl;//左上角坐标为(1,2)
//7,提取右上角坐标
cout << r5.br() << endl;//右下角坐标为(4,6)
//8,判断一个点是否在矩形区域内
bool bValue = r5.contains(Point2f(3, 3));
cout << bValue << endl;//(3,3)是在矩形区域内
//9,计算两个矩形区域的交集
Rect r00(0, 0, 2, 2);
Rect r01(1, 1, 2, 2);
Rect rResult = r00&r01;
cout << rResult << endl;//结果为1*1 from(1,1);
//10.计算两个矩形区域的并集
rResult = r00 | r01;
cout << rResult << endl;//结果为 3*3 from(0,0)
//11
rResult = r00 + Size(2,1);//宽度+2 ,高度+1
cout << rResult << endl;//结果为 4x3 from(0,0)
//12
rResult = r00 + Point2i(1,2);
cout << rResult << endl;//结果为2*2 from (1,2)
return 0;
}