https://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_tutorials.html
cv2.line()
cv2.circle()
cv2.rectangle()
cv2.ellipse()
cv2.putText()
上述函数的共同参数:
cv2.LINE_AA
可以让曲线获得抗锯齿的效果,从而使曲线更加平滑。1. Drawing Line(画线)
要画一条直线,需要传递直线起始点的坐标。
在一张黑色的图片上画一条从左上角到右下角的蓝色对角线。
import numpy as np
import cv2
#创建一个黑色背景
img = np.zeros((512,512,3),np.uint8)
#画一条宽度为5个像素,颜色为蓝色的对角线
cv2.line(img,(0,0),(511,511),(255,0,0),5)
#创建窗口,显示图形
cv2.namedWindow('image',cv2.WINDOW_NORMAL)
#cv2.resizeWindow('image',500,500)#定义画布的大小
cv2.imshow('image',img)
#任意敲击键盘,关闭窗口
cv2.waitKey(0)
cv2.destroyAllWindows()
说明:numpy.zeros()
函数——创建一维或多维数组,第一个参数表示一个元组(高,宽,通道数),第二个参数设置数组元素类型。
2. Drawing Rectangle(画长方形)
要画一个长方形,需要传递它的左上角与右下角顶点的坐。
在背景的右上角画一个绿色的长方形。
cv2.rectangle(img,(384,0),(510,128),(0,255,0),3)
3. Drawing Circle(画圆)
要画一个圆,需要指定圆心的位置和圆的半径。
在之前画的长方形内部画一个圆。
cv2.circle(img,(447,63),63,(0,0,255),-1) #-1表示向内填充
4. Drawing Ellipse(画椭圆)
要画一个椭圆,第一个参数是中心点的位置坐标,第二个参数是椭圆长轴和短轴的长度。angle
代表椭圆沿逆时针方向偏转的角度。startAngle
和 endAngle
表示从长轴开始顺时针方向从 startAngle 到 endAngle 的部分会被充满颜色。关于角度问题请点击这里
在画布的中心位置画一个半椭圆。
cv2.ellipse(img,(256,256),(100,50),0,0,180,255,-1)
5. Drawing Polygon(画多边形)
要画一个多边形,需要指定每个顶点坐标。然后把所有的顶点放到构建一个大小相等于ROWS X 1 X 2的数组里面。这里 ROWS 就是顶点的个数,数组必须是 int32 类型。
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))
说明:
numpy.array()
函数用来创建一个数组,这里给它传了一个二维数组,第二个参数为数组类型。reshape()
函数表示给数组一个新的形状而不改变其数据。reshape((-1,1,2))
里面的-1代表这个维度是有其他两个维度计算而来的,数组的转换规律是不能改变原数组中的元素。cv2.polylines()
函数用来画多条直线。第三个参数如果是 False, 表示图形首尾不相连,就得不到一个闭合的图形。cv2.line()
一条一条的画直线效率高很多。6. Adding Text to Images(在图片上添加文字)
要在图像上显示文字,需要设定以下参数。
lineType = cv2.LINE_AA
写一个OpenCV在画布的底部
font=cv2.FONT_HERSHEY_SIMPLEX
cv2.putText(img,'OpenCV',(10,500),font,4,(255,255,255),2,cv2.LINE_AA)
全部代码如下
import numpy as np
import cv2
#创建一个黑色背景
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,45,300,185,-1) #椭圆
#多边形
pts=np.array([[10,5],[200,300],[100,70],[60,45]],np.int32)
pts=pts.reshape((-1,1,2))
cv2.polylines(img,[pts],True,(0,255,255),2)
#在画布上添加文字
font=cv2.FONT_HERSHEY_SIMPLEX
cv2.putText(img,'HONGYUAN~',(80,500),font,2,(255,255,255),2,cv2.LINE_AA)
#创建窗口,显示图形
cv2.namedWindow('image',cv2.WINDOW_NORMAL)
#cv2.resizeWindow('image',950,500)#改变画布的大小
cv2.imshow('image',img)
cv2.imwrite('yuan~.jpg',img)
print('done')
cv2.waitKey(0)
cv2.destroyAllWindows()