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


    目录

    1.绘制直线line()

    2.绘制圆形circle()

    3.绘制椭圆形ellipse() 

    4.绘制矩形rectangle()

    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.例子

    1. // 生成一个黑色图像用于绘制几何图形
    2. Mat img=Mat::zeros(Size(512,512),CV_8UC3);
    3. //绘制圆形
    4. circle(img,Point(50,50),25,Scalar(255,255,255),-1);//绘制一个实心圆
    5. circle(img,Point(100,50),20,Scalar(255,255,255),4);//绘制一个空心圆
    6. //绘制直线
    7. line(img,Point(100,100),Point(200,100),Scalar(255,255,255),2,LINE_4,0);//绘制一条直线
    8. //绘制椭圆
    9. ellipse(img,Point(300,255),Size(100,70),0,0,100,Scalar(255,255,255),-1);
    10. //绘制矩形
    11. rectangle(img,Point(50,400),Point(100,450),Scalar(125,125,125),-1);
    12. //绘制多边形
    13. Point pp[2][6];
    14. pp[0][0]=Point(72,200);
    15. pp[0][1]=Point(142,204);
    16. pp[0][2]=Point (226,263);
    17. pp[0][3]=Point (172,310);
    18. pp[0][4]=Point (117,319);
    19. pp[0][5]=Point (15,260);
    20. pp[1][0]=Point(359,339);
    21. pp[1][1]=Point(447,351);
    22. pp[1][2]=Point (504,349);
    23. pp[1][3]=Point (484,433);
    24. pp[1][4]=Point (418,449);
    25. pp[1][5]=Point (354,402);
    26. Point pp2[5];
    27. pp2[0]=Point (350,83);
    28. pp2[1]=Point(463,90);
    29. pp2[2]=Point (500,171);
    30. pp2[3]=Point (421,194);
    31. pp2[4]=Point (338,141);
    32. const Point *pts[3]={pp[0],pp[1],pp2};//pts变量的生成
    33. int npts[]={6,6,5};
    34. fillPoly(img,pts,npts,3,Scalar(125,125,125),8);//绘制3个多边形
    35. putText(img,"Learn OpenCV 4",Point(100,400),2,1,Scalar(255,255,255));
    36. imwrite("/sdcard/DCIM/img.jpg",img);

  • 相关阅读:
    关于pwn题的栈平衡中ret的作用
    数据结构小记【Python/C++版】——链表篇
    【数据分享】1901-2022年我国省市县镇四级的逐年最低气温数据(免费获取/Shp/Excel格式)
    【高中数学】三角函数、解三角形学习笔记
    Spark Monte Carlo
    【WPF应用30】WPF中的ListBox控件详解
    企业如何加强合同风险控制?
    Vite 入门篇:学会它,一起提升开发幸福感。
    EVALUATING HALLUCINATIONS IN CHINESE LARGE LANGUAGE MODELS
    【数据库系统】数据库编程
  • 原文地址:https://blog.csdn.net/weixin_63357306/article/details/132607282