文章目录
- 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;
}




















