我们需要在图像中绘制一些图案一起突出某些内容的作用。在OpenCV中有许多绘制几何图形的方法。
一、绘制圆形
在OpenCV中提供了circle()函数用于绘制圆形,代码原型如下:
void cv::circle(InputOutputArray img,
Point center,
int radius,
const Scalar& color,
int thickness = 1,
int lineType = LINE_8,
int shift = 0
)
img:需要绘制圆形的图像。
center:圆形的圆心位置坐标。
radius:直线圆形的半径,单位为像素。
color:圆形的颜色。
thickness:轮廓的宽度,如果数值为负,则绘制一个实心圆。
lineType:边界的类型,可取值为FILLED、LINE_4、LINE_8和LINE_AA。
shift:中心坐标和半径数值中的小数数位。
二、绘制直线
在OpenCV中提供了line()函数用于绘制直线,代码原型如下:
void cv::line(InputOutArray img,
Point pt1,
Point pt2,
const Scalar& color,
int thickness = 1,
int lineType = LINE_8,
int shift = 0
)
pt1:直线起点在图像中的坐标。
pt2:直线终点在图像中的坐标。
color:直线的颜色,用三通道表示。
三、绘制椭圆
在OpenCV中提供了ellipse()函数用于绘制椭圆,代码原型如下:
void cv::ellipse(InputOutputArray img,
Point center,
Size axes,
double angle,
double startAngle,
double endAngle,
const Scalar& color,
int thickness = 1,
int lineType = LINE_8,
int shift = 0
)
center:椭圆的中心坐标。
axes:椭圆主轴大小的一半。
angle:椭圆旋转的角度,单位为度。
startAngle:椭圆弧起始的角度,单位为度。
endAngle:椭圆弧终止的角度,单位为度。
在这里相同意义的参数不在介绍。
在OpenCV中还提供了另一个名为ellipse2Poly()的函数用于输出椭圆边界的像素坐标,但是不会在图像中绘制椭圆,代码原型如下:
void cv::ellipse2Poly(Point center,
Size axes,
int angle,
int arcStart,
int arcEnd,
int delta,
std::vector< Point >& pts
)
delta:后续折线顶点之间的角度,它定义了近似精度。
pts:椭圆边缘像素坐标向量集合。
四、绘制多边形
在OpenCV中提供了函数rectangle()函数fillPoly()用于绘制多边形,代码原型如下:
void cv::rectangle(InputOutArray img,
Point pt1,
Point pt2,
const Sclar& color,
int thickness = 1,
int lineType = LINE_8,
int shift = 0
)
void cv::rectangle(InputOutArray img,
Rect rec,
const Scalar& color,
int thickness = 1,
int lineType = LINE_8,
int shift = 0
)
pt1:矩形的一个顶点。
pt2:矩形中与pt1相对的顶点,即两个点在对角线上。
rec:矩形左上角顶点和长度。
在这里我们详细介绍Rec变量,该变量在OpenCV中表示矩形的含义,与Point,Vec3b等类型相同,Rect表示的是矩形的左上角像素坐标,以及矩形的长和宽,该类型定义的格式为Rect(像素的X坐标,像素的Y坐标,矩形的宽,矩形的高)。
void cv::fillPoly(InputOutputArray img,
const Point ** pts,
const int * npts,
int ncontours,
const Scalar & color,
int lineType = LINE_8,
int shift = 0,
Point offset = Point()
)
pts:多边形顶点数组,可以存放多个多边形的顶点坐标的数组。
npts:每个多边形顶点数组中顶点的个数。
ncoutours:绘制多边形的个数。
offset:所有顶点的可选偏移。
五、文字生成
在OpenCV中实现在图像生成的文字putText()函数,函数原型如下:
void cv::putText(InputOutputArray img,
const String& text,
Point org,
int fontFace,
double fontScale,
Scalar color,
int thickness = 1,
int lineType = LINE_8,
bool bottomLeftOrigin = false
)
text:输出到图像的文字,目前OpenCV只支持英文。
org:图像中文字字符的左下角像素坐标。
fontFace:字体类型的选择标志、参数取值范围及含义在下表中给出。
fontScale:字体的大小。
bottomLeftOrigin:图像数据原点的位置。默认为左上角;如果参数改为true,则原点为左下角。
标志 | 取值 | 含义 |
FONT_HERSHEY_DUPLEX | 2 | 正常大小的较复杂的无衬线字体 |
FONT_HERSHEY_COMPLEX | 3 | 正常大小的衬线字体 |
FONT_HERSHEY_TRIPLEX | 4 | 正常大小的较复杂的衬线字体 |
FONT_HERSHEY_COMPLEX_SMALL | 5 | 小尺寸的衬线字体 |
FONT_HERSHEY_SCRIPT_SIMPLEX | 6 | 手写风格的字体 |
FONT_HERSHEY_SCRIPT_COMPLEX | 7 | 复杂的手写风格字体 |
FONT_ITALIC | 16 | 斜体字体 |