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);
相关推荐
Laurence23 分钟前
C++ 引入第三方库(一):直接引入源文件
开发语言·c++·第三方库·添加·添加库·添加包·源文件
lijianhua_971236 分钟前
国内某顶级大学内部用的ai自动生成论文的提示词
人工智能
EDPJ42 分钟前
当图像与文本 “各说各话” —— CLIP 中的模态鸿沟与对象偏向
深度学习·计算机视觉
蔡俊锋43 分钟前
用AI实现乐高式大型可插拔系统的技术方案
人工智能·ai工程·ai原子能力·ai乐高工程
自然语1 小时前
人工智能之数字生命 认知架构白皮书 第7章
人工智能·架构
大熊背1 小时前
利用ISP离线模式进行分块LSC校正的方法
人工智能·算法·机器学习
eastyuxiao1 小时前
如何在不同的机器上运行多个OpenClaw实例?
人工智能·git·架构·github·php
蒸汽求职1 小时前
机器人软件工程(Robotics SDE):特斯拉Optimus落地引发的嵌入式C++与感知算法人才抢夺战
大数据·c++·算法·职场和发展·机器人·求职招聘·ai-native
诸葛务农1 小时前
AGI 主要技术路径及核心技术:归一融合及未来之路5
大数据·人工智能
光影少年1 小时前
AI Agent智能体开发
人工智能·aigc·ai编程