首页 > python opencv单通道转多通道_13、OpenCV绘图和文本显示

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

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

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

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

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

ab9761f9c0b24e7fa93451f83b72d01c.png

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函数绘制任意数量的未填充多边形。 它可以处理一般多边形,包括具有自交叉的多边形。

bd6b0262ade0d41c41f205d053bd92c0.png

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

8da97de069d0b2b3203cd5b7abf3e96a.png

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

a858fa84f36ef53b17cd4d374383eafd.png
#include "opencv2/highgui/highgui.hpp"#include "opencv2/imgproc/imgproc.hpp"#include "iostream"using namespace cv;using namespace std;int main(int argc, 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) } };const Point *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 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;}
fc4ba43b3e86f76a3c2bb9e177c52e27.png

更多相关:

  • 学习如何在AutoCad中绘制建筑设计图从平面图到AutoCad土木工程中的整栋建筑 你会学到: 如何绘制房屋地图 如何绘制建筑设计 如何从AutoCad打印或出图 AutoCaD使用 AutoCaD命令使用 如何在2D Autocad中构建家庭或房屋地图(完整教程视频包括家庭地图、窗户、门、室内家具或物品、绘画等。) 能够担...

  • Quartz2D是跨平台的,同时支持iOS与Mac。 支持圆型裁剪,可以实现圆形头像等功能,也支持手势解锁、折线图等的制作。 对于复杂的UI界面,还可以通过Quartz2D将控件内部的结构画出来,可用于自定义控件。 实际上iOS大部分控件都是通过Quartz2D画出来的,一个重要价值是自定义view。 一些基础概念: 1.图形上下...

  • 情况一:后台给的日期是Sat Jul 31 2021 21:50:01 GMT+0800 (中国标准时间),如果直接呈现给用户,他们一定会吐槽你不说人话~~~ 情况二:后台给的百分数是小数没有转化成00%格式 采用vue的过滤机制就可以解决这种情况,有两种方式: 第一种:全局写法,在main.js里面加入 // 【...

  • 问题描述 使用main函数的参数,实现一个整数计算器,程序可以接受三个参数,第一个参数“-a”选项执行加法,“-s”选项执行减法,“-m”选项执行乘法,“-d”选项执行除法,后面两个参数为操作数。 例如:输入test.exe  -a 1 2       执行1+2输出3 问题分析 上面的逻辑思维很简单,但是问题在于如何在VS中向...

  • ------------------------siwuxie095                         MyBatis 中 #{} 和 ${} 的区别       1、在 MyBatis 的映射配置文件中,动态传递参数有两种方式:    (1)#{} 占位符    (2)${} 拼接符          2、#{} 和...

  •     #2.6 map()# 第一个参数传入一个函数,,第二个参数为一个可迭代对象li_1 = (1,3,5,7)def funcA(x): return x*xm1 = map(funcA,li_1)print(type(m1))print(m1())# 2.6 reduce()# 第一个参数传入一个函数,第二个参数 可以迭...

  • 列表,元组,字典的转换。 list列表是一组可变的元素集合 列表是'[]'括号组成的,[]括号包含所有元素,列表的创建可以传递字符串,也可以传递多个字符串来创建列表。如"asd", / "a","b" ... tuple元组的创建和列表一致,区别在于 元组是以'()'创建的,并且元组数据不可变。 dict字典不同于列表和元组,他...

  • 草色新雨中, 松声晚窗里。之前我们学习 Power Query 都是用鼠标就完成了很多复杂的操作。虽然 PowerQuery 已经将大部分常用功能内置成到功能区。基本能完成我们大部分的报表自动化功能。但是总有些复杂的或者个性化的问题是开发团队没有预先想到的,这时我们就需要学习 M 语言。一、M 语言在哪里?M语言的函数公式有三个地...

  • 前言从2020年3月份开始,计划写一系列文档--《小白从零开始学编程》,记录自己从0开始学习的一些东西。第一个系列:python,计划从安装、环境搭建、基本语法、到利用Django和Flask两个当前最热的web框架完成一个小的项目第二个系列:可能会选择Go语言,也可能会选择Vue.js。具体情况待定,拭目以待吧。。。基本概念表达式表...

  • 1.1函数1.1.1什么是函数函数就是程序实现模块化的基本单元,一般实现某一功能的集合。函数名:就相当于是程序代码集合的名称参数:就是函数运算时需要参与运算的值被称作为参数函数体:程序的某个功能,进行一系列的逻辑运算return 返回值:函数的返回值能表示函数的运行结果或运行状态。1.1.2函数的作用函数是组织好的,可重复使用的,用来...

  • 原标题:基于Python建立深度神经网络!你学会了嘛?图1 神经网络构造的例子(符号说明:上标[l]表示与第l层;上标(i)表示第i个例子;下标i表示矢量第i项)单层神经网络图2 单层神经网络示例神经元模型是先计算一个线性函数(z=Wx+b),接着再计算一个激活函数。一般来说,神经元模型的输出值是a=g(Wx+b),其中g是激活函数(...

  • 在学习MySQL的时候你会发现,它有非常多的函数,在学习的时候没有侧重。小编刚开始学习的时候也会有这个感觉。不过,经过一段时间的学习之后,小编发现尽管函数有很多,但是常用的却只有那几个。今天小编就把常用的函数汇总一下,为大家能够能好的学习MySQL中的函数。MySQL常使用的函数大概有四类。时间函数、数学函数、字符函数、控制函数。让我...