一、绘制基础图形
绘制直线:
line(InputOutputArray img. Point pt1, Point pt2, const Scalar & color, int thickness = 1,llineType = int LINE_8, int shift = 0
pt1:直线起始点在图像中的坐标。
pt2:直线终点在图像中的坐标。
color:直线的颜色,用三通道表示。
thickness:图像的宽度
lineType:线的类型,可取值为FILLED ,LINE_4,LINE_8和LINE_AA
shift:中心坐标和半径数值中的小数位数。
绘制圆形:
circle(lnputoutputArray img, Point center, int radius, const Scalar & color,int thickness = 1,lineType =, int LINE_8, int shift = 8
thickness:圆形的线宽,如果为负数,则为实心圆。
img:绘制圆形的图像。
center:圆形的中心位置。
radius:圆形的半径长度,单位为像素。
color:圆形的颜色,用三通道表示。
绘制椭圆形:
ellipse(lnputOutputArray img, Point center, Size axes, double angle, double startAngle, double endAngle, const Scalar & collor,
int thickness = 1,lineType =, int LINE_8, int shift = e
center:椭圆的中心坐标。
axes:椭圆主轴大小的一半。
angle:椭圆旋转的角度,单位为度。
startAngle:椭圆弧起始的角度,单位为度。
endAngle:椭圆弧终止的角度,单位为度。
其余参数与绘制圆一致。
绘制矩形:
rectangle(InputOutputArray img, Point pt1, Point pt2, const Scalar & color, int thickness = 1,lineType =, int LINE_8, int shift = 0
ptl:左上角顶点。
pt2:右下角顶点。
其余参数与直线一致。
绘制多边形:
fillPoly(InputOutputArray img, const Point ** pts, const int * npts, int ncontours, const Scalar & color,lineType =, int LINE_8, int shift = 0, Point offset = Point()
pts:多边形顶点数组,可以存放多个多边形的顶点坐标的数组。
npts:每个多边形顶点数组中顶点个数。
ncontours:绘制多边形的个数。
offset:所有顶点的可选偏移。
绘制文字:
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 4只支持英文。
org:图像中文字字符串的左下角像素坐标。
fontFace:字体类型的选择标志。
fontScale:字体的大小。
bottomLeftOrigin:图像数据原点的位置,默认为左上角,如果参数改为true,则原点为左下角。
本节示例代码如下:
//生成一个纯黑色图片
Mat img = Mat::zeros(Size(512, 512), CV_8UC3);
//绘制一个圆形
circle(img, Point(50, 50), 25, Scalar(255, 255, 255), -1); //实心
circle(img, Point(100, 100), 20, Scalar(255, 255, 255), 4);//空心
//绘制直线
line(img, Point(100, 100), Point(200, 100), Scalar(255, 255, 255), 2, LINE_4, 0);
//绘制椭圆
ellipse(img, Point(300, 255), Size(100, 70), 0, 0, 100, Scalar(255, 255, 255), -1);//一部分
//绘制矩形
rectangle(img, Point(50, 400), Point(100, 450), Scalar(125, 125, 125), -1);
//绘制多边形
Point pp[2][6];
pp[0][0] = Point(72, 200);
pp[0][1] = Point(142, 204);
pp[0][2] = Point(226, 263);
pp[0][3] = Point(172, 310);
pp[0][4] = Point(117, 319);
pp[0][5] = Point(15, 260);
pp[1][0] = Point(359, 339);
pp[1][1] = Point(447, 351);
pp[1][2] = Point(504, 349);
pp[1][3] = Point(484, 433);
pp[1][4] = Point(418, 449);
pp[1][5] = Point(354, 402);
Point pp2[5];
pp2[0] = Point(350, 83);
pp2[1] = Point(463, 90);
pp2[2] = Point(500, 171);
pp2[3] = Point(421, 194);
pp2[4] = Point(338, 141);
const Point* pts[3] = { pp[0],pp[1],pp2 };
//顶点个数数组生成
int npts[] = { 6,6,5 };
//绘制三个多边形
fillPoly(img, pts, npts, 3, Scalar(125, 125, 125), 8);
//生产文字
putText(img, "abc", Point(100, 400), 2, 1, Scalar(255, 255, 255));