demo
import cv2
import numpy as np
img = np.zeros((512,512,3),np.uint8)
cv2.line(img,(0,0),(511,511),(255,0,0),5)
cv2.rectangle(img,(384,0),(510,128),(0,255,0),3)
cv2.circle(img,(447,63), 63, (0,0,255),1)
cv2.ellipse(img,(256,256),(100,50),0,0,180,(0,255,0),-1)
pts = np.array([[10,5],[20,30],[70,20],[50,10]], np.int32)
pts = pts.reshape((-1,1,2))
cv2.polylines(img,[pts],True,(0,255,255))
font=cv2.FONT_HERSHEY_SIMPLEX
cv2.putText(img,'OpenCV',(10,500), font, 4,(255,255,255),2)
cv2.imshow("image",img)
cv2.waitKey()
画线
cv2.line(img,(0,0),(511,511),(255,0,0),5)
第一个参数img是一张图片,表示我们将要在这张图片上画一条线,可以理解为一个画布。 第二个参数(0,0)表示这条线的起始点坐标。 第三个参数(511,511)表示这条线的终点坐标。 第四个参数(255,0,0)表示这条线的颜色,例子中的(255,0,0)表示R为255,G为0,B为0即红色。 第五个参数5表示这条线的粗细即宽度。
画矩形
cv2.rectangle(img,(384,0),(510,128),(0,255,0),3)
第一个参数img是一张图片,表示我们将要在这张图片上画一条线,可以理解为一个画布。 第二个参数(384,0)表示矩形左上角顶点的坐标。 第三个参数(510,128)表示矩形右下角顶点的坐标。 第四个参数(0,255,0)表示矩形线条的颜色。 第五个参数3表示矩形线条的粗细即宽度。
画圆
cv2.circle(img,(447,63), 63, (0,0,255), -1)
第一个参数img是一张图片,表示我们将要在这张图片上画一条线,可以理解为一个画布。 第二个参数(447,63)表示圆心的坐标。 第三个参数63表示圆的半径。 第四个参数(0,0,255)表示圆的颜色。 第五个参数-1表示圆线条的宽度。 注意:第五个参数为负数的时候,不管值是多少,只要是负数,都表示画的是一个实色的圆,如果为正数,代表着圆的粗细即宽度。
画椭圆
cv2.ellipse(img,(256,256),(100,50),0,0,180,(255,0,0),-1)
第一个参数ima是一张图片,表示我们将要在这张图片上画一条线,可以理解为一个画布。 第二个参数(256,256)表示圆心的坐标。 第三个参数(100,50)表示椭圆长轴和短轴的长度。 第四个参数0表示整个椭圆沿中心点旋转的角度。 第五个参数0表示圆弧沿顺时针方向的起始角度。 第六个参数180表示圆弧沿顺时针方向的结束角度。 注:本例中第五个参数为0,第六个参数为180,表示半个椭圆 第七个参数(255,0,0)表示椭圆的颜色。 第八个参数-1的含义与画圆函数的第五个参数相同。
画多边形
pts = np.array([[10,5],[20,30],[70,20],[50,10]], np.int32)
创建一个四行两列二维数组,指定多边形每个点的坐标,注意,数据类型必须是int32。二维数组的行数表示点的个数。
将pts写成这样会比较容易理解一点。
[
[10,5],
[20,30],
[70,20],
[50,20]
]
pts = pts.reshape((-1,1,2))
这里将二维数组转换为三维数据,如下所示,表示四个一行两列的二维数组。
[
[
[10,5]
],
[
[20,30]
],
[
[70,20]
],
[
[50,20]
]
]
三维数组不好理解,实际上,不需要将二维数组转换为三维数组也可以画多变形,书上没有解释,官方文档也没有解释,我不太明白为什么需要加这一步。留一个疑问,以后理解了再来补充。
cv2.polylines(img,[pts],True,(0,255,255))
第一个参数img是一张图片,表示我们将要在这张图片上画一条线,可以理解为一个画布。 第二个参数[pts]表示多边形每个点的坐标的列表。 第三个参数True表示多边形是否闭合(首尾是否相连),True:闭合,False:不闭合。 第四个参数(0,255,255)表示多边形线条的颜色。 注意:cv2.polylines() 可以被用来画很多条线。只需要把想要画的线放在一个列表中,将这个列表传给函数就可以了。每条线都会被独立绘制。这会比用cv2.line() 一条一条的绘制要快一些。
在图片上添文字
font=cv2.FONT_HERSHEY_SIMPLEX
cv2.putText(img,'OpenCV',(10,500), font, 4,(255,255,255),2)
第一个参数img是一张图片,表示我们将要在这张图片上画一条线,可以理解为一个画布。 第二个参数’OpenCV’表示文字的内容。 第三个参数(10,500)表示文字的起始位置。 第四个参数font表示文字的字体。 第五个参数4表示文字的大小即字号。 第六个参数(255,255,255表示文字的颜色。 第七个参数2表示文字线条的粗细。
|