OpenCV_Python学习笔记--OpenCV中的绘图函数

时间:2021-11-06 07:02:36

示例代码均来自OpenCV官方文档
主要函数:

cv2.line()      #画一条线
cv2.circle() #画一个圆
cv2.rectangle() #画一个矩形
cv2.ellipse() #画一个椭圆
cv2.putText() #给图像加入文字

以上函数均有多个参数,并且排列顺序基本类似,基本如以下所示:
(1)img:你想要绘图的图像;
(2)color:绘制图形的颜色。以(B,G,R)的顺序排列,传入一个元组,如:(255,0,0)代表蓝色。对于灰度图像,只需要写入灰度值;
(3)线宽:绘制图形的线条的粗细,如果给一个闭合图形赋值为 -1,那么这个图形就会被填充。默认值 = 1;
(4)线条的类型:8连接或者抗锯齿等,设置为 8 或者 cv2.LINE_AA,建议设置为抗锯齿型(cv2.LINE_AA),这样线条看起来比较圆滑。

以上参数为绘图函数的通用参数,即每一个绘图函数都会用到,但是具体使用函数的过程中,参数还需要做出略微的修改,简单举例说明一下:

通用部分

import cv2
import numpy as np
img = np.zeros((512,512,3),np.uint8) #创建一块 512 * 512 的黑色区域

画一条线:

cv2.line(img,(0,0),(511,511),(255,0,0),5)

这段代码中参数分别代表:

img:在img这个图像中进行图形绘制;
(0,0):所绘制线条的起点坐标;(以图像的左上角为坐标原点,向右及向下均为坐标轴正方向)
(511,511):绘制线条的重点坐标位置;
(255,0,0):线条的颜色;(参照(B,G,R)的顺序,且颜色为8位)
5:线条的宽度。

参数中没有设置线条类型,所以使用默认参数,如果想设置,可以自行加上去,方法参考上面所述内容。

画一个矩形:

cv2.circle(img,(384,0),(510,128),(0,255,0),3)

和上面画线条不同的是,(384,0)(510,128)这两个坐标分别是矩形的左上角和右下角的坐标值。

同样,画出一个圆形:

cv2.circle(img,(447,64),63,(0,0,255),-1)

代码中的(447,63)指的是圆形图形的圆心位置,63这个参数代表的是圆形的半径,-1上面已经说过了,表示圆形图形被填充。
我们不执行代码,通过计算也能得出,绘制的圆形正好是之前绘制的矩形的内接圆。

继续,我们在同一幅图像上绘制一个椭圆:

椭圆的绘制比较麻烦,需要的参数包括:椭圆中心点的位置,接下来分别是长轴和短轴的长度,椭圆沿逆时针方向转到的角度(0~90),椭圆弧沿顺时针方向起始的角度,结束角度(0~360)。

 cv2.ellipse(img,(256,256),(100,50),0,0,180,(255,0,0),-1)

接下来,绘制一个多边形:

绘制多边形没有固定的函数来完成这个工作,因此我们需要借助矩阵来完成多边形的绘制。
绘制多边形的时候,我们需要根据绘制图像的不同,分别指定多边形每个顶点的坐标位置,例如:

pts = np.array([[10,5],[20,30],[70,20],[51,10]],np.int32)
pts = pts.reshape((-1,1,2))
img = cv2.polylines(img,[pts],True,(0,255,255))

如果在上面代码中第三个参数的值设置为False,那么得出的多边形不是首尾相连的图形,具体可以实际操作一下看看。

在图像中添加文字:

在图像中添加文字需要的参数分别是:
需要添加的文字;
文字添加的位置;
字体的类型;(可以在cv2.outText()文档中查到相应的字体)
字体的大小;
文字的一般属性(颜色、线条的粗细及线条的类型等),依据实际情况进行选择。

font = cv2.FONT_HERSHEY_SIMPLEX
cv2.putText(img,"Hello",(10,500),font,4,(255,255,255),2)

首先我们定义了字体的选择,同样也可以直接在函数中设定,(10,500)这个坐标是插入文字的左上角的坐标值。

注意
所有的绘图函数的返回值都是None,因此,img = cv2.line(img,(0,0),(511,511),(255,0,0),5)这种是不能使用的。

以上内容,我们可以通过修改参数等方式熟悉一下绘图函数的具体使用方法。