void line(Mat& img, Point pt1, Point pt2, const Scalar& color, int thickness=1, int lineT ype=8, int shift=0);
img: 要绘制线段的图像。
pt1: 线段的起点。
pt2: 线段的终点。
color: 线段的颜色,通过一个 Scalar 对象定义。
thickness: 线条的宽度,默认值为 1。
lineType: 线段的类型。可以取值 8,4,和CV_AA, 分别代表8邻接连接线,4 邻接连接线和反锯齿连接线。默认值为 8 邻接。为了获得更好地效果可以选用 CV_AA (采用了高斯滤波)。
shift: 坐标点小数点位数,默认值 0。
void ellipse(Mat& img, Point center, Size axes,double angle, double startAngle, double endAngle, const Scalar& color, int thickness=1,int lineType=8, int shift=0);
img: 要绘制椭圆的图像。
center: 椭圆中心点坐标。
axes: 椭圆位于该 Size 决定的矩形内。(即定义长轴和短轴)。
angle: 椭圆的角度。
startAngle: 椭圆开始绘制时角度。
endAngle: 椭圆绘制结束时角度。(若绘制一个完整的椭圆,则startAngle=0, endAngle = 360)。
color: 椭圆的颜色。
thickness: 绘制椭圆线粗。负数表示全部填充。
lineType、shift:同上。
void rectangle(Mat& img, Point pt1, Point pt2, const Scalar& color, int thickness=1, int lineType=8, int shift=0);
pt1: 矩形的左上角坐标。
pt2: 矩阵的右下角坐标。
其余同上。
void circle(Mat& img, Point center, int radius, const Scalar& color, int thickness=1, int lineType=8, int shift=0);
center: 圆心坐标。
radius: 半径。
其余同上。
void fillPoly(Mat& img, const Point** pts,const int* npts, int ncontours, const Scalar& color, int lineType=8, int shift=0, Point offset=Point() );
pts: 多边形定点集。
npts: 多边形的顶点数目。
ncontours: 要绘制多边形的数量。
offset: 所有点轮廓的可选偏移。
其余同上。
void putText(Mat& img, const string& text, Point org, int fontFace, double fontScale, Scalar color, int thickness=1, int lineType=8, bool bottomLeftOrigin=false )
img – 显示文字所在图像.
text – 待显示的文字.
org – 文字在图像中的左下角 坐标.
fontFace – 字体类型, 可选择字体: FONT_HERSHEY_SIMPLEX, FONT_HERSHEY_PLAIN, FONT_HERSHEY_DUPLEX, FONT_HERSHEY_COMPLEX, FONT_HERSHEY_TRIPLEX, FONT_HERSHEY_COMPLEX_SMALL, FONT_HERSHEY_SCRIPT_SIMPLEX, FONT_HERSHEY_SCRIPT_COMPLEX, 以上所有类型都可以配合FONT_HERSHEY_ITALIC使用,产生斜体效果。
fontScale – 字体大小,该值和字体内置大小相乘得到字体大小
color – 文本颜色
thickness – 写字的线的粗细
lineType – 线型.
bottomLeftOrigin – false, 图像数据原点在左下角。否则, 图像数据原点在左上角.
代码示例:
#include<opencv.hpp>
using namespace cv;
#define wname1 "[绘制图1]" //为窗口标题定义的宏
#define wname2 "[绘制图2]" //为窗口标题定义的宏
#define wwidth 600 //定义窗口大小的宏
//绘制不同角度。相同尺寸的椭圆
void DrawEllipse(Mat img, double angle){
int thickness = 2;
int lineType = 8;
ellipse(img, Point(wwidth / 2, wwidth / 2),Size(wwidth / 4, wwidth / 16), angle,0, 360, Scalar(255, 129, 0), thickness, lineType);
}
//绘制实心圆
void DrawFilledCircle(Mat img, Point center){
int thickness = -1; //线粗
int lineType = 8;
circle(img, center, wwidth / 32, Scalar(0, 0, 255),thickness, lineType);
}
//实现凹多边形绘制
void DrawPolygon(Mat img){
int lineType = 8;
//创建一些点
Point rootPoints[1][20];
rootPoints[0][0] = Point(wwidth / 4, 7 * wwidth / 8);
rootPoints[0][1] = Point(3 * wwidth / 4, 7 * wwidth / 8);
rootPoints[0][2] = Point(3 * wwidth / 4, 13 * wwidth / 16);
rootPoints[0][3] = Point(11 * wwidth / 16, 13 * wwidth / 16);
rootPoints[0][4] = Point(19 * wwidth / 32, 3 * wwidth / 8);
rootPoints[0][5] = Point(3 * wwidth / 4, 3 * wwidth / 8);
rootPoints[0][6] = Point(3 * wwidth / 4, wwidth / 8);
rootPoints[0][7] = Point(26 * wwidth / 40, wwidth / 8);
rootPoints[0][8] = Point(26 * wwidth / 40, wwidth / 4);
rootPoints[0][9] = Point(22 * wwidth / 40, wwidth / 4);
rootPoints[0][10] = Point(22 * wwidth / 40, wwidth / 8);
rootPoints[0][11] = Point(18 * wwidth / 40, wwidth / 8);
rootPoints[0][12] = Point(18 * wwidth / 40, wwidth / 4);
rootPoints[0][13] = Point(14 * wwidth / 40, wwidth / 4);
rootPoints[0][14] = Point(14 * wwidth / 40, wwidth / 8);
rootPoints[0][15] = Point(wwidth / 4, wwidth / 8);
rootPoints[0][16] = Point(wwidth / 4, 3 * wwidth / 8);
rootPoints[0][17] = Point(13 * wwidth / 32, 3 * wwidth / 8);
rootPoints[0][18] = Point(5 * wwidth / 16, 13 * wwidth / 16);
rootPoints[0][19] = Point(wwidth / 4, 13 * wwidth / 16);
const Point* ppt[1] = { rootPoints[0] };
int npt[] = { 20 };
fillPoly(img, ppt, npt, 1, Scalar(255, 255, 255), lineType);
}
// 绘制线
void DrawLine(Mat img, Point start, Point end){
int thickness = 2;
int lineType = 8;
line(img, start, end, Scalar(0, 0, 0), thickness, lineType);
}
int main(){
//创建空白的Mat图像
Mat atomImage = Mat::zeros(wwidth, wwidth, CV_8UC3);
Mat rookImage = Mat::zeros(wwidth, wwidth, CV_8UC3);
//----------- 绘制化学中原子的示例图-----------
//1.先绘制出椭圆
DrawEllipse(atomImage, 90);
DrawEllipse(atomImage, 0);
DrawEllipse(atomImage, 45);
DrawEllipse(atomImage, -45);
//2.再绘制出圆心
DrawFilledCircle(atomImage, Point(wwidth / 2, wwidth / 2));
//----------- 绘制组合图形----------------
//1.线绘制出多边形
DrawPolygon(rookImage);
//2.绘制矩形
rectangle(rookImage, Point(0, 7 * wwidth),Point(wwidth, wwidth), Scalar(0, 255, 255), -1, 8);
//2.绘制一些线段
DrawLine(rookImage, Point(0, 15 * wwidth / 16),Point(wwidth, 15 * wwidth / 16));
DrawLine(rookImage, Point(wwidth / 4, 7 * wwidth / 8),Point(wwidth / 4, wwidth));
DrawLine(rookImage, Point(wwidth / 2, 7 * wwidth / 8),Point(wwidth / 2, wwidth));
DrawLine(rookImage, Point(3 * wwidth / 4, 7 * wwidth / 8),Point(3 * wwidth / 4, wwidth));
//3.显示绘制出的图像
imshow(wname1, atomImage);
moveWindow(wname1, 0, 200);
imshow(wname2, rookImage);
moveWindow(wname2, wwidth, 200);
waitKey(0);
return 0;
}
借鉴博客:https://www.cnblogs.com/ishero/p/11136315.html
原文:https://www.cnblogs.com/bjxqmy/p/12225743.html