• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

opencv c++ 多边形填充和绘制16

武飞扬头像
lucust
帮助1

API:

polylines(预定义的背景画布, 点数组, true, 颜色, 线宽, 线形, shift参数);

fillPoly(定义的背景画布, 点数组, 颜色, 线形, shift参数);

1、简单绘制一个多边形:

  1.  
    void QuickDemo::polyline_demo()
  2.  
    {
  3.  
    //创建画布
  4.  
    Mat canvas = Mat::zeros(Size(512, 512), CV_8UC3);
  5.  
    Point p1(100, 100);
  6.  
    Point p2(350, 100);
  7.  
    Point p3(450, 280);
  8.  
    Point p4(320, 450);
  9.  
    Point p5(80, 400);
  10.  
    //生成点数组向量,并初始化容量,使用索引赋值,如果不初始化容量,只能通过push_back()来填充元素。
  11.  
    vector<Point> pts;
  12.  
    pts.push_back(p1);
  13.  
    pts.push_back(p2);
  14.  
    pts.push_back(p3);
  15.  
    pts.push_back(p4);
  16.  
    pts.push_back(p5);
  17.  
    //绘制多边形polylines()
  18.  
    polylines(canvas, pts, true, Scalar(255, 0, 0), 3, 8, 0);
  19.  
    imshow("多边形绘制", canvas);
  20.  
     
  21.  
    }

结果:

学新通

 2、填充多边形

如果直接如Rect等API直接将线宽参数赋值-1,在执行程序会报错,此处有专门的填充函数来实现:

fillPoly(定义的背景画布, 点数组, 颜色, 线形, shift参数);

  1.  
    void QuickDemo::polyline_demo()
  2.  
    {
  3.  
    //创建画布
  4.  
    Mat canvas = Mat::zeros(Size(512, 512), CV_8UC3);
  5.  
    Point p1(100, 100);
  6.  
    Point p2(350, 100);
  7.  
    Point p3(450, 280);
  8.  
    Point p4(320, 450);
  9.  
    Point p5(80, 400);
  10.  
    //生成点数组向量,并初始化容量,使用索引赋值,如果不初始化容量,只能通过push_back()来填充元素。
  11.  
    vector<Point> pts;
  12.  
    pts.push_back(p1);
  13.  
    pts.push_back(p2);
  14.  
    pts.push_back(p3);
  15.  
    pts.push_back(p4);
  16.  
    pts.push_back(p5);
  17.  
    //绘制多边形polylines()
  18.  
    polylines(canvas, pts, true, Scalar(255, 0, 0), 3, 8, 0);
  19.  
    fillPoly(canvas, pts, Scalar(0, 255, 0), 8, 0);
  20.  
    imshow("多边形绘制", canvas);
  21.  
     
  22.  
    }

结果:

学新通

 3、使用一个函数来选择实现绘制轮廓或填充

第二步中的实现方法过于麻烦,可以使用如下函数实现:

drawContours(画布, 包含多个点数组的数组, 点数组索引, 颜色, 线宽);

 注:点数组索引 = -1时,会绘制所有轮廓, 线宽为 -1 时, 实现填充。

代码:

  1.  
    void QuickDemo::polyline_demo()
  2.  
    {
  3.  
    //创建画布
  4.  
    Mat canvas = Mat::zeros(Size(512, 512), CV_8UC3);
  5.  
    Point p1(100, 100);
  6.  
    Point p2(350, 100);
  7.  
    Point p3(450, 280);
  8.  
    Point p4(320, 450);
  9.  
    Point p5(80, 400);
  10.  
    //生成点数组向量,并初始化容量,使用索引赋值,如果不初始化容量,只能通过push_back()来填充元素。
  11.  
    vector<Point> pts;
  12.  
    pts.push_back(p1);
  13.  
    pts.push_back(p2);
  14.  
    pts.push_back(p3);
  15.  
    pts.push_back(p4);
  16.  
    pts.push_back(p5);
  17.  
    绘制多边形polylines()
  18.  
    //polylines(canvas, pts, true, Scalar(255, 0, 0), 3, 8, 0);
  19.  
    //fillPoly(canvas, pts, Scalar(0, 255, 0), 8, 0);
  20.  
    //创建包含多个点数组的数组
  21.  
    vector<vector<Point>> contours;
  22.  
    contours.push_back(pts);
  23.  
    drawContours(canvas, contours, -1, Scalar(255, 0, 0), -1);
  24.  
    imshow("多边形绘制", canvas);
  25.  
     
  26.  
    }

结果:

学新通

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhgcckjc
系列文章
更多 icon
同类精品
更多 icon
继续加载