文章目录
- Rect()矩形类
- 1、实例化 Rect() 类:
- (1)构造函数:
- 2、Rect类的成员函数
- (1)rect.size() 和 rect.area() 和 rect.width() 和 rect.height(),用来描述矩形的宽度,高度,尺寸和面积;
- (2)br() 和 tl(),用来描述矩形坐标点的
- (3)rect.contains(Point(x, y)) 和 rect.inside(Point(x, y)),用来判断点是否在矩形中,返回值都是bool类型
- (4)对矩形进行比较,返回布尔变量
- (5)对矩形进行平移和缩放:
- (6)矩形运算,求两个矩形的交集和并集
- rectangle()函数
- 1、函数原型1:绘制出的是矩形框或矩形,当thickness大于0时绘制出来的是矩形框,当thickness小于0时绘制出来的是实心的矩形;
- (1)参数解释:
- (2)示例:
- 2、函数原型2:利用 Rect()矩形类绘制矩形或矩形,当thickness大于0时绘制出来的是矩形框,当thickness小于0时绘制出来的是实心的矩形;
- (1)参数解释:
- (2)示例:
Rect()矩形类
Rect()矩形类,主要作用是绘制矩形,rectangle()函数可以利用 Rect()矩形类,来绘制矩形;
1、实例化 Rect() 类:
(1)构造函数:
Rect rect(int x, int y, int width, int height);
Rect rect(100, 50, 50, 100);
创建矩形对象的构造函数有四个参数,左上角的坐标(x,y)和矩阵的宽度和高度
2、Rect类的成员函数
(1)rect.size() 和 rect.area() 和 rect.width() 和 rect.height(),用来描述矩形的宽度,高度,尺寸和面积;
- rect.width() // 返回rect的宽度 50
- rect.height() // 返回rect的高度 100
- rect.size() // 返回rect的尺寸 [50 × 100]
- rect.area() // 返回rect的面积 5000
(2)br() 和 tl(),用来描述矩形坐标点的
- rect.br() // 返回rect的右下角顶点的坐标 [150, 150]
- rect.tl() // 返回rect的左上角顶点的坐标 [100, 50]
(3)rect.contains(Point(x, y)) 和 rect.inside(Point(x, y)),用来判断点是否在矩形中,返回值都是bool类型
- rect.contains(Point(x, y)) // 判断rect是否包含Point(x, y)点,两个函数用法相同
- rect.inside(Point(x, y)) // 判断rect是否包含Point(x, y)点,两个函数用法相同
(4)对矩形进行比较,返回布尔变量
- rect1 == rect2
- rect1 != rect2
(5)对矩形进行平移和缩放:
Rect类可以通过简单的与一个Point类型变量相加实现矩形平移,以及与一个Size类型变量相加实现矩形的放缩
- rect = rect + Point(-100, 100); // 平移,也就是左上顶点的x坐标-100,y坐标+100
- rect = rect + Size(-100, 100); // 缩放,左上顶点不变,宽度-100,高度+100
扩展
1、OpenCV里没有判断rect1是否在rect2里面的功能,所以自己写一个
bool isInside(Rect rect1, Rect rect2)
{
return (rect1 == (rect1&rect2));
}
2、OpenCV没有获取矩形中心点的功能,自己写一个
Point getCenterPoint(Rect rect)
{
Point cpt;
cpt.x = rect.x + cvRound(rect.width/2.0);
cpt.y = rect.y + cvRound(rect.height/2.0);
return cpt;
}
3、围绕矩形中心缩放函数
Rect rectCenterScale(Rect rect, Size size)
{
rect = rect + size;
Point pt;
pt.x = cvRound(size.width/2.0);
pt.y = cvRound(size.height/2.0);
return (rect-pt);
}
(6)矩形运算,求两个矩形的交集和并集
- rect = rect1 & rect2
- rect = rect1 | rect2
Mat m1 = imread("1.jpg");
Mat m2 = imread("1.jpg");
Rect rect1(0,0,300,300);
Rect rect2(0, 0, 100, 100);
Scalar s(255, 255, 0);
Rect rt1 = rect1 & rect2; //取并集
rectangle(m1, rt1, s);
Rect rt2 = rect1 | rect2; //取交集
rectangle(m2, rt2, s);
imshow("交集", m1);
imshow("并集", m2);
rectangle()函数
rectangle()函数的主要作用是给图片的指定区域加上矩形边框,通常用在图片的标记上,使图片处理的目标区域可视化,便于我们对目标区域的处理;
1、函数原型1:绘制出的是矩形框或矩形,当thickness大于0时绘制出来的是矩形框,当thickness小于0时绘制出来的是实心的矩形;
void rectangle( InputOutputArray img,
Point(i,j) pt1,
Point(i+img.cols, j+img.rows) pt2,
const Scalar &color,
int thickness = 1,
int lineType = LINE_8,
int shift = 0 );
(1)参数解释:
- img:被处理的图片;
- pt1:矩形左上角顶点的坐标;
- pt2:矩形对角线上,右下角顶点的坐标;
- color:线条颜色 (RGB) 或 亮度(灰度图像);
- thickness:矩形框线条的粗细,等于1时表示线宽为1个像素(thickness小于0表示填充即画一个实心的矩形,大于0表示绘制即画一个矩形框);
- line_type:线条的类型;
- shift:坐标点的小数点位数;
// line_type 线条的类型
enum LineTypes {
FILLED = -1,
LINE_4 = 4,
LINE_8 = 8,
LINE_AA = 16
};
(2)示例:
#include <iostream>
#include <opencv2/opencv.hpp>
#include <vector>
using namespace cv;
int main()
{
Mat image = imread("C:\\Users\\Pictures\\suzy.jpg");
rectangle(image, cv::Point(100, 150), Point(250, 300), Scalar(0, 0, 255),4);
imshow("rectangle", image);
waitKey(0);
return 0;
}
2、函数原型2:利用 Rect()矩形类绘制矩形或矩形,当thickness大于0时绘制出来的是矩形框,当thickness小于0时绘制出来的是实心的矩形;
void rectangle( InputOutputArray img,
Rect rect,
const Scalar &color,
int thickness = 1,
int lineType = LINE_8,
int shift = 0 )
(1)参数解释:
- img:被处理的图片;
- rect:绘制矩形的规格;
- color:绘制矩形的颜色 (RGB) 或 亮度(灰度图像);
- thickness:同上;
- line_type:同上;
- shift:同上;
(2)示例:
#include <iostream>
#include <opencv2/opencv.hpp>
#include <vector>
using namespace cv;
int main()
{
Mat image = imread("C:\\Users\\Pictures\\suzy.jpg");
Rect rect;
rect.x = 100;
rect.y = 150;
rect.width = 150;
rect.height = 150;
// 开始绘制矩形框
rectangle(image, rect, Scalar(0, 0, 255),4);
imshow("rectangle", image);
waitKey(0);
return 0;
}