我们经常想要绘制各种形状,为此,OpenCV提供了一系列功能,可以绘制直线,矩形,圆等。OpenCV的绘图功能适用于图像,但其中大多数仅影响前三个通道,在单通道图像的情况下仅默认第一个通道。大多数绘图支持颜色,厚度,线条类型的修改。

当指定颜色时,使用Scalar对象,大部分只使用前三个值。有时可以使用Scalar中的第四个值来表示alpha通道,但绘图函数目前不支持alpha混合。另外, OpenCV使用BGR转换多通道图像以进行颜色渲染。

绘制功能的厚度和线型参数两者都是整数,但后者唯一可接受的值是4,8或 LINE_AA等。厚度是以像素为单位粗细。对于圆形,矩形和所有其他闭合形状,厚度参数也可以设置为FILLED。在这种情况下,结果是绘制的图形将以与边缘相同的颜色填充。lineType参数指示行应该是“4连接”,“8连接”还是消除锯齿。

对于绘图算法,通常将端点(线),中心点(圆),角(矩形)等指定为整数。这些与像素对齐。在有可用移位的情况下,它为整数参数中的位数,将其视为小数位。例如,如果想要一个以(5,5)为中心的圆,半径设置为1,那么这个圆将被画成(2.5,2.5)。这种效果通常会非常微妙,并取决于所使用的线型。对于消除锯齿的线条效果最明显。表1是绘制函数

表1 绘制函数

函数名

说明

circle()

绘制圆

clipLine()

该函数用来判断点pt1和点pt2连接的直线是否在一个矩形范围内

ellipse()

绘制椭圆

ellipse2Poly()

跟ellipse()函数类似,指定采样点的角度参数后,会计算出一系列点,可以用这些点作为顶点的多边形来近似指定的椭圆弧

fillConvexPoly()

绘制一个填充的多边形

fillPoly()

绘制任意数量的填充的多边形,可以处理自交点

line()

绘制直线

rectangle()

绘制矩形

polyLines()

绘制多边形

circle()的第一个参数就是图像。接下来是中心,二维点和半径。其余参数是标准颜色,厚度,线型和移位。

clipLine()此函数用于确定由两个点pt1和pt2指定的线是否位于矩形边界内。

ellipse()函数与circle()函数非常相似,主要区别在于Size类型的axes参数。高度和宽度参数表示椭圆的长轴和短轴的长度。角度是从水平逆时针测量的长轴的角度,startAngle和endAngle指示开始和结束的角度。因此,对于完整的椭圆,必须分别将这些值设置为0和360。

指定椭圆的替代方法是使用边界框。在这种情况下,RotatedRect的参数框完全指定了椭圆的大小和方向。。

ellipse2Poly()函数由ellipse()在内部计算椭圆弧,但也可以自己调用它。给定有关椭圆弧(ellipse()中定义的椭圆弧参数(中心,轴,角度,startAngle和endAngle-all)和指定要采样的点之间角度的参数信息, ellipse2Poly ()计算一系列点,形成了指定的椭圆弧的多边形逼近。计算的点将返回到矢量<> pts中。

fillConvexPoly()函数如果传递给它的多边形具有自相交,则会出错它将无法正常工作.2 pts中的点被视为顺序,并且pts中的最后一点 第一点是隐含的(即,多边形被假定为关闭)。

fillPoly绘制任意数量的填充多边形。fillConvexPoly()不同,它可以处理具有自相交的多边形。

函数line()在图像中绘制一条从pt1到pt2的直线。线条会被图像边界自动裁剪

rectangle()函数在图像中绘制一个从pt1到pt2的矩形。

polyLines函数绘制任意数量的未填充多边形。它可以处理一般多边形,包括具有自交叉的多边形。

表2    两个文本绘图功能。

函数

说明

putText()

在图像中绘制指定的文本

getTextSize()

确定文本的宽度和高度

putText函数是OpenCV的文本绘制函数; 它只是将一些文本投射到图像上。除非bottomLeftOrigin标志为true,否则文本将在文本框的左上角以指示的颜色打印,在这种情况下,文本框的左下角位于原点。使用的字体由fontFace参数选择,该参数可以是表3中列出的任何一种。

表3   字体

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

每种字体都有一个大小。当fontScale不是1.0时,在绘制文本之前,字体大小由该数字缩放。图1显示了每种字体的示例。

#include"opencv2/highgui/highgui.hpp"

#include"opencv2/imgproc/imgproc.hpp"

#include"iostream"

usingnamespace cv;

usingnamespace std;

int main(intargc, char** argv)

{

Mat src = imread("E:/绘制.jpg", 1);

namedWindow("原图", 0);

imshow("原图", src);

circle(src, Point2d(100, 100), 100, Scalar(255, 0, 0), 3,4, 0);

ellipse(src, Point2d(350, 100), Size(100, 50), 0, 0,360, Scalar(0, 255, 0), 3, 8, 0);

line(src, Point2d(500, 50), Point2d(600, 100), Scalar(0, 0, 255), 3,4, 0);

rectangle(src, Rect(100, 300, 100,80), Scalar(255, 255, 0), 3, 4, 0);

Point p[2][3] = { { Point(300, 400), Point(400, 380), Point(450, 260) },

{ Point(420, 540), Point(540, 300), Point(570,530) } };

constPoint *pp[] = { p[0], p[1] };

int n[] = { 4, 4 };

polylines(src, pp,n,1,true, Scalar(0, 255, 255), 3,8, 0);

fillPoly(src, pp, n, 1, Scalar(255, 255,0),4,0);

bool isOk = clipLine(Rect(50, 50, 200,200), p[0][0], p[0][1]);

vector<Point2i> pts;

ellipse2Poly(Point(350, 250), Size(200, 150), 30,0, 200, 4, pts);

Point Points[5] = { { 520,550 },{578,550 },{ 540,440 },{ 532,432 },{ 500,530 } };

fillConvexPoly(src,Points, 5, Scalar(255, 0, 255));

putText(src, "OpenCV Draw Graphics And Text",Point(100,100), FONT_HERSHEY_PLAIN, 1.0, Scalar(255, 255, 0));

namedWindow("OpenCV绘制图形和文本演示", 0);

imshow("OpenCV绘制图形和文本演示", src);

waitKey(0);

return 0;

}

opencv ellipse函数_13、OpenCV绘图和文本显示相关推荐

  1. python opencv单通道转多通道_13、OpenCV绘图和文本显示

    我们经常想要绘制各种形状,为此,OpenCV提供了一系列功能,可以绘制直线,矩形,圆等.OpenCV的绘图功能适用于图像,但其中大多数仅影响前三个通道,在单通道图像的情况下仅默认第一个通道.大多数绘图 ...

  2. python opencv resize函数_Python OpenCV中的resize()函数的使用

    改变图像大小意味着改变尺寸,无论是单独的高或宽,还是两者.也可以按比例调整图像大小. 这里将介绍resize()函数的语法及实例. 语法 函数原型 cv2.resize(src, dsize[, ds ...

  3. OpenCV——line、circle、rectangle、ellipse、polylines函数的使用和绘制文本putText函数以及绘制中文的方法。

    学习OpenCV的过程中,画图是不可避免的,本篇文章旨在介绍OpenCV中与画图相关的基础函数. 1.画线条--line()函数 介绍: cv2.line(image, start_point, en ...

  4. OpenCV学习笔记(二十一)——绘图函数core OpenCV学习笔记(二十二)——粒子滤波跟踪方法 OpenCV学习笔记(二十三)——OpenCV的GUI之凤凰涅槃Qt OpenCV学习笔记(二十

    OpenCV学习笔记(二十一)--绘图函数core 在图像中,我们经常想要在图像中做一些标识记号,这就需要绘图函数.OpenCV虽然没有太优秀的GUI,但在绘图方面还是做得很完整的.这里就介绍一下相关 ...

  5. OpenCV绘图和文本输出功能的实例(附完整代码)

    OpenCV绘图和文本输出功能的实例 OpenCV绘图和文本输出功能的实例 OpenCV绘图和文本输出功能的实例 #include "opencv2/core.hpp" #incl ...

  6. 利用OpenCV的函数putText()为图像添加数值型文本内容

    OpenCV的函数putText()的原型如下: C++原型: void cv::putText(InputOutputArray img,const String & text,Point ...

  7. python用函数绘制椭圆_详解opencv中画圆circle函数和椭圆ellipse函数

    1. void ellipse(InputOutputArray img, Point center, Size axes, double angle, double startAngle, doub ...

  8. OpenCV中的GUI特性 —— 绘图+鼠标画笔+轨迹栏调色板

    OpenCV中的GUI特性 -- 绘图+鼠标画笔+轨迹栏调色板 这一部分内容主要包括OpenCV的绘图函数.鼠标回调函数与画图的结合和轨迹栏的使用,绘图函数的传参是关键,鼠标回调函数也是一个相当重要的 ...

  9. Opencv:Task01:Opencv基本了解、图像读取和绘图

    Task01:Opencv基本了解.图像读取和绘图 8 bits(位值)-> 256 levels(分辨率) 灰度图像:0黑色-255白色,将灰色分成256级,一层 全彩图像RGB:颜色通道(红 ...

最新文章

  1. leetcode 24: 两两交换链表中的节点
  2. 数据库存在即更新的并发处理 - 转
  3. 如何从开始掌控会议?
  4. C++读取与保持图片
  5. linux 执行sh 文件是遇到找不到cd '目录'
  6. 使用遇到的问题_水性漆在使用过程中遇到的问题以及解决方案
  7. 内存泄露和溢出的区别_Java 中的内存溢出和内存泄露是什么?我给你举个有味道的例子?...
  8. 敏捷开发一千零一问系列之十五:同时实施CMMI和敏捷哪个为主?
  9. matlab迭代算法实例_智能优化算法及其MATLAB实例-免疫算法笔记
  10. 2年工作经验杂谈(java开发)
  11. 基于SSM高校教室管理系统毕业设计-附源码181523
  12. python图片中文汉字标注乱码,变成方框
  13. pc 微信小程序 位置
  14. XGBOOST + LR 模型融合 python 代码
  15. HDFS的优缺点和缺陷
  16. 11,基于JESD204 IP核的设计实现方法
  17. CSI SAP2000 v22详细安装教程(图文安装步骤)
  18. poi word 添加内容时 光标向下迭代生成新的段落
  19. 【课程整理】随机系统期末整理
  20. 程序员每天到底有多累?

热门文章

  1. [php]php设计模式 Bridge (桥接模式)
  2. 向域管理转型所遇到的问题
  3. Typesetting Engine_Gecko
  4. RabbitMq入门(七)消息处理(消息持久化autoDelete、消息确认ACK机制)
  5. Leetcode-MySQL-180. 连续出现的数字
  6. ElasticSearch中的分析器是什么?
  7. Eclipse 创建 Maven 工程
  8. 服务器操作系统co,搭建coturn服务器
  9. spark任务shell运行_Spark原理与实战之部署模式与运行机制
  10. 基于python的作业管理系统_python day18 作业 Django 开发主机管理系统