C++ OpenCV学习:三、创建画布,绘制线条、矩形、圆、椭圆,添加文本

创建画布

创建纯黑画布可以使用Mat::zeros函数,信息如下:
在这里插入图片描述
参数1:rows,行数
参数2:cols,列数
参数3:type,创建的矩阵类型

代码如下:

Mat img = Mat::zeros(512, 512, CV_8UC3);

创建的画布效果图片如下:
在这里插入图片描述

绘制线条

绘制线条使用line函数,信息如下:
在这里插入图片描述
参数1:img,要绘制的图像
参数2:pt1,线条的第一个点,即起点
参数3:pt2,线条的第二个点,即终点
参数4:color,线条的颜色
参数5:thickness,线条的粗细,即线宽
参数6:lineType,线条的类型不常使用
参数7:shift,点坐标的小数位数不常使用
代码示例:

line(img, Point(150, 0), Point(150, 512), Scalar(255, 255, 255), 4);

绘制的线条效果如下:
在这里插入图片描述

绘制矩形

绘制矩形使用rectangle函数,信息如下:
在这里插入图片描述
参数1:img,要绘制的图像
参数2:pt1,矩形的顶点
参数3:pt2,与pt1对角的矩形顶点
参数4:color,矩形颜色
参数5:thickness,矩形线宽,负值会绘制实心矩形
参数6:lineType,线条 类型不常使用
参数7:shift,顶点坐标的小数位数不常使用

rectangle函数的重载函数信息如下:
在这里插入图片描述

参数1:img,要绘制的图像
参数2:rec,绘制的矩形
参数3:color,矩形颜色
参数4:thickness,矩形线宽
参数5:lineType,线条 类型不常使用
参数6:shift,顶点坐标的小数位数不常使用

Rect函数有多个重载,此处只介绍其中一种:Rect(x,y,width,height)
参数1:左上角顶点的x坐标
参数2:左上角顶点的y坐标
参数3:矩形的宽度
参数4:矩形的高度

代码如下:

// 方法1
rectangle(img, Point(100, 100), Point(400, 200), Scalar(0, 255, 255), 2);
// 方法2
rectangle(img, Rect(100, 300, 200, 100), Scalar(0, 255, 0), -1);

绘制的矩形效果如下:
在这里插入图片描述

绘制圆

绘制圆使用circle函数,信息如下:
在这里插入图片描述
参数1:img,要绘制的图像
参数2:center,圆心坐标
参数3:radius,圆的半径
参数4:color,圆的颜色
参数5:thickness,圆的线宽
参数6:lineType,线条 类型不常使用
参数7:shift,顶点坐标的小数位数不常使用

代码如下:

circle(img, Point(256, 256), 60, Scalar(255, 0, 0),5);

绘制的圆效果如下:
在这里插入图片描述

绘制椭圆

绘制椭圆使用ellipse函数,信息如下:
在这里插入图片描述
参数1:img,要绘制的图像
参数2:center,椭圆的中心坐标
参数3:axes,椭圆长轴和短轴尺寸的一半
参数4:angle,椭圆的旋转角度,度为单位
参数5:startAngle,椭圆弧的起始角度,度为单位
参数6:endAngle,椭圆弧的结束角,度为单位
参数7:color,椭圆的颜色
参数8:thickness,椭圆的线宽
参数9:lineType,线条 类型不常使用
参数10:shift,顶点坐标的小数位数不常使用
在这里插入图片描述
ellipse函数的重载函数信息如下:
在这里插入图片描述
参数1:img,要绘制的图像
参数2:box,椭圆的旋转矩形,椭圆将嵌入该矩形
参数3:color,椭圆的颜色
参数4:thickness,椭圆的线宽
参数5:lineType,线条 类型不常使用

代码如下:

// 方法1
ellipse(img, Point(256, 100), Size(60,80),30,0,180, Scalar(255, 255, 0),3);
// 方法2要用到旋转矩形,暂不作演示

绘制的椭圆效果如下:
在这里插入图片描述

添加文本

添加文本使用putText函数,信息如下:
在这里插入图片描述
参数1:img,要绘制的图像
参数2:text,要添加的文本
参数3:org,文本的起始点坐标
参数4,fontFace,字体类型
参数5,fontScale,字体比例
参数6:color,字体颜色
参数7:thickness,字体线宽
参数8:lineType,线条 类型不常使用
参数9:bottomLeftOrigin,为真文本位于左下角不常使用

fontFace字体类型如下:

fontFace解释说明
FONT_HERSHEY_SIMPLEX正常大小的无衬线字体
FONT_HERSHEY_PLAIN小号无衬线字体
FONT_HERSHEY_DUPLEX正常大小的无衬线字体(比FONT_HERSHEY_SIMPLEX更复杂
FONT_HERSHEY_COMPLEX正常大小的衬线字体
FONT_HERSHEY_TRIPLEX正常大小的衬线字体(比FONT_HERSHEY_COMPLEX更复杂)
FONT_HERSHEY_COMPLEX_SMALLFONT_HERSHEY_COMPLEX的较小版本
FONT_HERSHEY_SCRIPT_SIMPLEX手写样式字体
FONT_HERSHEY_SCRIPT_COMPLEX更复杂的FONT_HERSHEY_SCRIPT_SIMPLEX变体
FONT_ITALIC斜体字体标志

代码如下:

putText(img, "OpenCV", Point(30, 256), FONT_HERSHEY_COMPLEX, 1.0, Scalar(255, 0, 255));

添加的文本效果如下:
在这里插入图片描述
总代码如下:

#include<iostream>
#include<opencv.hpp>

using namespace std;
using namespace cv;

int main() {
	// 创建黑色画布
	Mat img = Mat::zeros(512, 512, CV_8UC3);

	// 绘制线条
	line(img, Point(150, 0), Point(150, 512), Scalar(255, 255, 255), 4);

	// 绘制矩形
	// 方法1
	rectangle(img, Point(100, 100), Point(400, 200), Scalar(0, 255, 255), 2);
	// 方法2
	rectangle(img, Rect(100, 300, 200, 100), Scalar(0, 255, 0), -1);

	// 绘制圆
	circle(img, Point(256, 256), 60, Scalar(255, 0, 0),5);

	// 绘制椭圆
	ellipse(img, Point(256, 100), Size(60,80),30,0,180, Scalar(255, 255, 0),3);

	// 添加文本
	putText(img, "OpenCV", Point(30, 256), FONT_HERSHEY_COMPLEX, 1.0, Scalar(255, 0, 255));

	imshow("img", img);
	waitKey(0);
	destroyAllWindows();
	return 0;
}