OpenCvSharp从入门到实践-(07)绘制图形

目录

1、线段的绘制

1.1实例1-绘制线段拼成一个"王"字

2、矩形的绘制

2.1实例2-绘制一个矩形边框

2.2实例3-绘制一个实心矩形

3、圆的绘制

3.1实例4-绘制"交通灯"

4、多边形绘制

4.1实例5-绘制等腰梯形

5、文字的绘制

5.1实例6-绘制文字OpenCvSharp


1、线段的绘制

OpenCvSharp提供Cv2.Line方法,使用该方法可以绘制各种线段,Cv2.Line方法如下:

public static void Line(InputOutputArray img, Point pt1, Point pt2, Scalar color, int thickness = 1, LineTypes lineType = LineTypes.Link8, int shift = 0)

说明:

摘要:
    Draws a line segment connecting two points

参数:
  img:
    The image.

  pt1:
    First point of the line segment.

  pt2:
    Second point of the line segment.

  color:
    Line color.

  thickness:
    Line thickness. [By default this is 1]

  lineType:
    Type of the line. [By default this is LineType.Link8]

  shift:
     Number of fractional bits in the point coordinates. [By default this is 0]

1.1实例1-绘制线段拼成一个"王"字

代码如下:

Mat canvas = Mat.Zeros(300, 300, MatType.CV_8UC3);

Cv2.Line(canvas, new Point(50, 50), new Point(250, 50), new Scalar(255, 0, 0), 5);
Cv2.Line(canvas, new Point(50, 150), new Point(250, 150), new Scalar(0, 255, 0), 10);
Cv2.Line(canvas, new Point(50, 250), new Point(250, 250), new Scalar(0, 0, 255), 15);
Cv2.Line(canvas, new Point(150, 50), new Point(150, 250), new Scalar(0, 255, 255), 20);

Cv2.ImShow("lines", canvas);
Cv2.WaitKey();
Cv2.DestroyAllWindows();

效果

每条线段的起点坐标和终点坐标

2、矩形的绘制

OpenCvSharp提供Cv2.Rectangle方法,该方法既可以绘制矩形边框,也可以绘制实心矩形,其函数如下:

public static void Rectangle(InputOutputArray img, Point pt1, Point pt2, Scalar color, int thickness = 1, LineTypes lineType = LineTypes.Link8, int shift = 0)

说明:
摘要:
    Draws simple, thick or filled rectangle

参数:
  img:
    Image.

  pt1:
    One of the rectangle vertices.

  pt2:
    Opposite rectangle vertex.

  color:
    Line color (RGB) or brightness (grayscale image).

  thickness:
    Thickness of lines that make up the rectangle. Negative values make the function
    to draw a filled rectangle. [By default this is 1]

  lineType:
    Type of the line, see cvLine description. [By default this is LineType.Link8]

  shift:
    Number of fractional bits in the point coordinates. [By default this is 0]

2.1实例2-绘制一个矩形边框

代码如下:

Mat canvas = Mat.Zeros(300, 300, MatType.CV_8UC3);

Cv2.Rectangle(canvas, new Point(50, 50), new Point(200, 150), new Scalar(255, 0, 0), 20);

Cv2.ImShow("Rectangle", canvas);
Cv2.WaitKey();
Cv2.DestroyAllWindows();

效果

2.2实例3-绘制一个实心矩形

代码如下:

Mat canvas = Mat.Zeros(300, 300, MatType.CV_8UC3);

Cv2.Rectangle(canvas, new Point(50, 50), new Point(200, 150), new Scalar(255, 0, 0), -1);

Cv2.ImShow("Rectangle", canvas);
Cv2.WaitKey();
Cv2.DestroyAllWindows();

效果

3、圆的绘制

 OpenCvSharp提供Cv2.Circle方法,该方法既可以绘制圆形边框,也可以绘制实心圆形,Cv2.Circle函数如下:

public static void Circle(InputOutputArray img, int centerX, int centerY, int radius, Scalar color, int thickness = 1, LineTypes lineType = LineTypes.Link8, int shift = 0)

说明:

摘要:
     Draws a circle

 参数:
   img:
     Image where the circle is drawn.

   centerX:
     X-coordinate of the center of the circle.

   centerY:
     Y-coordinate of the center of the circle.

   radius:
     Radius of the circle.

   color:
     Circle color.

   thickness:
     Thickness of the circle outline if positive, otherwise indicates that a filled
     circle has to be drawn. [By default this is 1]

   lineType:
     Type of the circle boundary. [By default this is LineType.Link8]

   shift:
     Number of fractional bits in the center coordinates and radius value. [By default
     this is 0]

3.1实例4-绘制"交通灯"

代码如下:

Mat canvas = Mat.Zeros(300, 300, MatType.CV_8UC3);

Cv2.Circle(canvas, new Point(50, 150), 40, new Scalar(0, 0, 255), -1);

Cv2.Circle(canvas, new Point(150, 150), 40, new Scalar(0, 255, 255), -1);

Cv2.Circle(canvas, new Point(250, 150), 40, new Scalar(0, 255, 0), -1);

Cv2.ImShow("TrafficLights", canvas);
Cv2.WaitKey();
Cv2.DestroyAllWindows();

效果

4、多边形绘制

OpenCvSharp提供Polylines方法绘制多边形,其函数如下:

public static void Polylines(Mat img, IEnumerable<IEnumerable<Point>> pts, bool isClosed, Scalar color, int thickness = 1, LineTypes lineType = LineTypes.Link8, int shift = 0)

说明:

摘要:
    draws one or more polygonal curves

参数:
  img:
    画布
  pts:
    多边形各顶点组成的列表
  isClosed:
    是否闭合
  color:
    颜色
  thickness:
    线条宽度
  lineType:

  shift:

4.1实例5-绘制等腰梯形

代码如下:

Mat canvas = Mat.Zeros(300, 300, MatType.CV_8UC3);

List<OpenCvSharp.Point> pts1 = new List<OpenCvSharp.Point>
{
    new OpenCvSharp.Point(100,50),
    new OpenCvSharp.Point(200,50),
    new OpenCvSharp.Point(50,250),
    new OpenCvSharp.Point(250,250)
};

List<List<OpenCvSharp.Point>> pts = new List<List<Point>>();
pts.Add(pts1);

Cv2.Polylines(canvas, pts, true, new Scalar(0, 0, 255), 1);

Cv2.ImShow("Polylines", canvas);
Cv2.WaitKey();
Cv2.DestroyAllWindows();

效果

5、文字的绘制

OpenCvSharp提供Cv2.PutText方法进行文字绘制,其函数如下:

public static void PutText(InputOutputArray img, string text, Point org, HersheyFonts fontFace, double fontScale, Scalar color, int thickness = 1, LineTypes lineType = LineTypes.Link8, bool bottomLeftOrigin = false)

说明:

摘要:
    renders text string in the image

参数:
  img:
    Image.

  text:
    Text string to be drawn.

  org:
    Bottom-left corner of the text string in the image.

  fontFace:
    Font type, see #HersheyFonts.

  fontScale:
    Font scale factor that is multiplied by the font-specific base size.

  color:
    Text color.

  thickness:
    Thickness of the lines used to draw a text.

  lineType:
    Line type. See #LineTypes

  bottomLeftOrigin:
    When true, the image data origin is at the bottom-left corner. Otherwise, it is at the top-left corner.

5.1实例6-绘制文字OpenCvSharp

代码如下:

Mat canvas = Mat.Zeros(300, 300, MatType.CV_8UC3);

Cv2.PutText(canvas, "OpenCvSharp", new Point(0, 50), HersheyFonts.Italic, 1, new Scalar(0,255,0), 1, LineTypes.AntiAlias, false);

Cv2.ImShow("Text", canvas);
Cv2.WaitKey();
Cv2.DestroyAllWindows();

效果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/276668.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

YB1161是一款高效同步升压转换器低至1pA的超低静态电流。

简介&#xff1a; YB1161是一款高效同步升压转换器低至1pA的超低静态电流。它能够从低电压源输送至少2W的功率&#xff0c;即。5V输出时为0.4A。它还具有真正的关闭功能在关闭和输出期间断开输入和输出短路条件。这消除了对外部MOSFET及其控制电路&#xff0c;用于断开输入输出…

亚信科技AntDB数据库——深入了解AntDB-M元数据锁的实现(二)

5.5 防止低优先级锁饥饿 AntDB-M按照优先级将锁又分了两类&#xff0c;用于解决低优先级锁饥饿问题。 ●独占型(hog): X, SNRW, SNW; 具有较强的不兼容性&#xff0c;优先级高&#xff0c;容易霸占锁&#xff0c;造成其他低优先级锁一直处于等待状态。 ●暗弱型(piglet): SW; …

Vue3报错: ‘defineProps‘ is not defined,解决方法

问题出现: 今天在使用 <script setup>组合式 API 的语法糖的时候&#xff0c;定义defineProps时候报错&#xff1a; ‘defineProps’ is not defined 查了一下资料&#xff0c;这是因为eslint的语法校验导致的问题。 解决方法1&#xff1a; 在项目根目录的文件.eslin…

【Linux | Docker】内网穿透实现远程访问Nginx Proxy Manager

文章目录 前言1. docker 一键安装2. 本地访问3. Linux 安装cpolar4. 配置公网访问地址5. 公网远程访问6. 固定公网地址 前言 Nginx Proxy Manager 是一个开源的反向代理工具&#xff0c;不需要了解太多 Nginx 或 Letsencrypt 的相关知识&#xff0c;即可快速将你的服务暴露到外…

Python+reuqests自动化接口测试

1.最近自己在摸索Pythonreuqests自动化接口测试&#xff0c;要实现某个功能&#xff0c;首先自己得有清晰的逻辑思路&#xff01;这样效率才会很快&#xff01; 思路--1.通过python读取Excel中的接口用例&#xff0c;2.通过python的函数调用&#xff0c;get/Post 进行测试&…

如何培养孩子的自信心

当谈论培养孩子的自信心时&#xff0c;许多家长可能会感到困惑。自信心是一个孩子成长过程中非常重要的品质&#xff0c;它可以帮助孩子在面对挑战时更加勇敢和坚定。那么&#xff0c;如何培养孩子的自信心呢&#xff1f;以下是一些建议&#xff0c;希望能对您有所帮助。 鼓励孩…

imazing是什么软件

imazing是什么软件 iMazing 是世界上最值得信赖的软件,可以将您的信息、音乐、文件和数据从 iPhone 或 iPad 传输到您的 Mac 或 PC。 获得备份、数据提取、媒体和文件传输的强大能力,以及更多 iMazing 功能。 iMazing是一款第三方的苹果iOS设备管理软件。 iMazing- 2 Mac-安装…

git的分支的使用,创建分支,合并分支,删除分支,合并冲突,分支管理策略,bug分支,强制删除分支

GIT | 分支 文章目录 GIT | 分支创建分支合并分支删除分支合并冲突分支管理策略bug分支强制删除分支 创建分支 查看当前本地仓库中有哪些分支 git branchHEAD所指向的分支就是当前正在工作的分支 cat .git/HEAD创建一个分支 git branch dev创建好了&#xff0c;但是目前还是…

学习黑马vue

项目分析 项目下载地址&#xff1a;vue-admin-template-master: 学习黑马vue 项目下载后没有环境可参考我的篇文章&#xff0c;算是比较详细&#xff1a;vue安装与配置-CSDN博客 安装这两个插件可格式化代码&#xff0c;vscode这个软件是免费的&#xff0c;官网&#xff1a;…

java的内存图

明确&#xff1a;jre jdk jvm关系 (详细去看这篇文章&#xff09; 三者的大致结构是这样的&#xff0c;简单来说就是JDK包含JRE,JRE又包含JVM的关系。如下图所示&#xff1a; 从图中可以看出JDK是整个JAVA的核心&#xff0c;包括了Java运行环境JRE&#xff08;Java Runtime E…

MATLAB六轴机械臂机器人的动力学分析

1、概述 动力学以牛顿第二定律为核心&#xff0c;这个定律指出了力、加速度、质量三者间的关系。 质点动力学有两类基本问题&#xff1a; 一是已知作用于质点上的力&#xff0c;求质点的运动&#xff0c;这个就是正动力学。 二是已知质点的运动&#xff0c;求作用于质点上的力…

微服务实战系列之MQ

前言 从今天起&#xff0c;席卷北国的雪&#xff0c;持续了一整天&#xff0c;北京也不例外。这场意外的寒潮&#xff0c;把整个冬天渲染的格外cool。当然你可以在外面打雪仗、堆雪人、拉雪橇&#xff0c;也可以静坐屋内&#xff0c;来一场围炉煮茶的party。此刻&#xff0c;冬…