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_SMALL | FONT_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;
}