OpenCV(十三):图像中绘制直线、圆形、椭圆形、矩形、多边形和文字

目录

1.绘制直线line()

2.绘制圆形circle()

3.绘制椭圆形ellipse()

4.绘制矩形rectangle()

[5.绘制多边形 fillPoly()](#5.绘制多边形 fillPoly())

6.绘制文字putText()

7.例子


1.绘制直线line()

复制代码
CV_EXPORTS_W void line(InputOutputArray img,
  Point pt1, 
  Point pt2,
  const Scalar& color,
  int thickness = 1, 
  int lineType = LINE_8, 
  int shift = 0
);
  • img:绘制圆形的图像
  • ptl:直线起始点在图像中的坐标
  • pt2: 直线终点在图像中的坐标
  • color:圆形的颜色,用三通道表示
  • thickness:轮廓的宽度
  • lineType:边界的类型,可取值为FILLED,LINE 4,LINE 8 和LINE AA
  • shift:中心坐标和半径数值中的小数位数

2.绘制圆形circle()

复制代码
CV_EXPORTS_W void 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:中心坐标和半径数值中的小数位数

3.绘制椭圆形ellipse()

复制代码
CV_EXPORTS_W void 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);
  • img:绘制圆形的图像
  • center:圆的中心坐标
  • axes:椭圆主轴大小的一半。
  • angle:椭圆旋转的角度,单位为度
  • startAngle:椭圆弧起始的角度,单位为度
  • endAngle:椭圆弧终止的角度,单位为度
  • color:圆形的颜色,用三通道表示
  • thickness:轮廓的宽度
  • lineType:边界的类型,可取值为FILLED,LINE 4,LINE 8 和LINE AA
  • shift:中心坐标和半径数值中的小数位数

4.绘制矩形rectangle()

复制代码
CV_EXPORTS_W void rectangle(InputOutputArray img, Point pt1, Point pt2,
                          const Scalar& color, int thickness = 1,
                          int lineType = LINE_8, int shift = 0);
  • img:绘制圆形的图像
  • pt1:左上角顶点
  • pt2:右下角顶点。
  • color:圆形的颜色,用三通道表示
  • thickness:轮廓的宽度
  • lineType:边界的类型,可取值为FILLED,LINE 4,LINE 8 和LINE AA
  • shift:中心坐标和半径数值中的小数位数

5.绘制多边形 fillPoly()

复制代码
CV_EXPORTS_W void fillPoly(InputOutputArray img, InputArrayOfArrays pts,
                           const Scalar& color, int lineType = LINE_8, 
                           int shift = 0,
                           Point offset = Point() );
  • img:绘制圆形的图像
  • pts: 多边形顶点数组,可以存放多个多边形的顶点坐标的数组
  • color:圆形的颜色,用三通道表示
  • lineType:边界的类型,可取值为FILLED,LINE 4,LINE 8 和LINE AA
  • shift:中心坐标和半径数值中的小数位数
  • offset:所有顶点的可选偏移。

6.绘制文字putText()

复制代码
CV_EXPORTS_W void putText( InputOutputArray img, const String& text, Point org,
                         int fontFace, double fontScale, Scalar color,
                         int thickness = 1, int lineType = LINE_8,
                         bool bottomLeftOrigin = false );
  • img:绘制圆形的图像
  • text:输出到图像中的文字,目前OpenCV 4只支持英文。
  • org:图像中文字字符串的左下角像素坐标。
  • fontFace:字体类型的选择标志
  • fontScale:字体的大小。
  • color:圆形的颜色,用三通道表示
  • thickness:轮廓的宽度
  • lineType:边界的类型,可取值为FILLED,LINE 4,LINE 8 和LINE AA
  • bottomLeftOrigin: 图像数据原点的位置,默认为左上角,如果参数改为true,则原点为左下角。

其中,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_ITALIC - 斜体字体。

7.例子

   //    生成一个黑色图像用于绘制几何图形
    Mat img=Mat::zeros(Size(512,512),CV_8UC3);
    //绘制圆形
    circle(img,Point(50,50),25,Scalar(255,255,255),-1);//绘制一个实心圆
    circle(img,Point(100,50),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};//pts变量的生成
    int npts[]={6,6,5};
    fillPoly(img,pts,npts,3,Scalar(125,125,125),8);//绘制3个多边形

    putText(img,"Learn OpenCV 4",Point(100,400),2,1,Scalar(255,255,255));
    imwrite("/sdcard/DCIM/img.jpg",img);
相关推荐
不去幼儿园2 分钟前
【MARL】深入理解多智能体近端策略优化(MAPPO)算法与调参
人工智能·python·算法·机器学习·强化学习
想成为高手4998 分钟前
生成式AI在教育技术中的应用:变革与创新
人工智能·aigc
YSGZJJ1 小时前
股指期货的套保策略如何精准选择和规避风险?
人工智能·区块链
Eastsea.Chen1 小时前
MTK Android12 user版本MtkLogger
android·framework
Ajiang28247353041 小时前
对于C++中stack和queue的认识以及priority_queue的模拟实现
开发语言·c++
无脑敲代码,bug漫天飞1 小时前
COR 损失函数
人工智能·机器学习
HPC_fac130520678162 小时前
以科学计算为切入点:剖析英伟达服务器过热难题
服务器·人工智能·深度学习·机器学习·计算机视觉·数据挖掘·gpu算力
安静读书5 小时前
Python解析视频FPS(帧率)、分辨率信息
python·opencv·音视频
小陈phd5 小时前
OpenCV从入门到精通实战(九)——基于dlib的疲劳监测 ear计算
人工智能·opencv·计算机视觉
‘’林花谢了春红‘’6 小时前
C++ list (链表)容器
c++·链表·list