随笔 - 632  文章 - 17  评论 - 54  阅读 - 93万

OpenCV绘制基本几何图形

一、概述

  案例:使用OpenCV绘制线、矩形、椭圆、圆形、多边形、文本(不支持绘制中文)

复制代码
1.绘制线:

line(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:线段的类型。可以取值LINE_8, LINE_4, 和CV_AA, 分别代表8邻接连接线,4邻接连接线和反锯齿连接线。默认值为8邻接。为了获得更好地效果可以选用CV_AA(采用了高斯滤波)。
shift:坐标小数点位,默认0就行


2.绘制矩形

rectangle(InputOutputArray img, Rect rec,
                          const Scalar& color, int thickness = 1,
int lineType = LINE_8, int shift = 0);
img:在哪里绘制矩形
rec:矩形坐标
color:线条颜色
thickness:线宽
lineType:同上面线段
ps:后三个参数可以不填写,直接默认就行

3.绘制一个椭圆
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:绘制的终止角度
后面的参数同上


4.绘制一个圆
circle(InputOutputArray img, Point center, int radius,
                       const Scalar& color, int thickness = 1,
                       int lineType = LINE_8, int shift = 0);
img:在哪里绘制
center:中心点坐标
其他参数同上

5.绘制多边形
fillPoly(InputOutputArray img, const Point** pts,
                         const int* npts, int ncontours,
                         const Scalar& color, int lineType = LINE_8, int shift = 0,
Point offset = Point() );
img:绘制在哪里
pts:多边形顶点集合
npts:要绘制的多边形顶点数目
ncontours:要绘制的多边形数量
其他参数解释同上

7.绘制文本
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:要绘制的文本
org:第一个字符左下角坐标
fontFace:字体类型,FONT_HERSHEY_SIMPLEX ,FONT_HERSHEY_PLAIN ,FONT_HERSHEY_DUPLEX 
fontScale:字体大小,我们设置为2号
其他参数解释同上



复制代码

 

二、代码示例

复制代码
 Mat src = Mat::zeros(500,500,CV_8UC3);//创建一个单通道黑色图片
    //绘制一条直线
    line(src,Point(0,0),Point(500,500),Scalar(125,125,125),1,LINE_AA);

    //绘制一个矩形
    Rect rect = Rect(125, 125, 225, 225);
    Scalar color = Scalar(125,125,125);
    rectangle(src,rect,color,2,LINE_8);

    //绘制一个椭圆
    ellipse(src,Point(250,250),Size(src.cols / 4, src.rows / 8), 90, 0, 360, color, 2, LINE_8);

    //绘制一个圆
    circle(src,Point(250,250),100,color,1,LINE_AA);

    //绘制多边形并对其进行填充
    Point pts[1][5];
    pts[0][0] = Point(100, 100);
    pts[0][1] = Point(100, 200);
    pts[0][2] = Point(200, 200);
    pts[0][3] = Point(200, 100);
    pts[0][4] = Point(100, 100);
    const Point* ppts[] = { pts[0] };
    int npt[] = { 5 };
    fillPoly(src, ppts, npt, 1, color, 8);

    //绘制文本
    putText(src,"hello OpenCV",Point(100,100),FONT_HERSHEY_COMPLEX, 1.0, Scalar(12, 23, 200), 3, 8);

    QImage qImage = QImage(src.data,src.cols,src.rows,src.step,QImage::Format_BGR888);
    label->setFixedSize(QSize(qImage.width(),qImage.height()));
    label->setScaledContents(true);
    label->setPixmap(QPixmap::fromImage(qImage));
复制代码

 

三、图片

 

posted on   飘杨......  阅读(235)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示