示例代码均来自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)
这种是不能使用的。
以上内容,我们可以通过修改参数等方式熟悉一下绘图函数的具体使用方法。