上面所有的这些绘图函数需要设置下面这些参数:
注意:
所有的绘图函数的返回值都是 None ,所以不能使用 img = cv2.line(img,(0,0),(511,511),(255,0,0),5)
要画一条线,你只需要告诉函数这条线的起点和终点。
line(img, pt1, pt2, color, thickness=1, lineType=8, shift=0);
import numpy as np
import cv2
import matplotlib.pyplot as plt
#创建一个黑色图片 np.zeros()返回一个填充为0的数组
img1 = np.zeros((512,512,3),np.uint8)
img2 = np.zeros((512,512,3),np.uint8)
参考这位博主的博客:https://blog.csdn.net/yixieling4397/article/details/80173290
shift参数,实际上是将坐标的小数点向前移动几位。
注意左上角的蓝色线,那就是shift=5出现的连线,那么此时大家就知道,原来shift参数,就是将坐标的小数点向前移动几位,其实就是缩小倍数。
#画一条5px粗的蓝色对角线im_show()
cv2.line(img1,(0,0),(511,511),(0,0,255),5,cv2.LINE_AA,0)
cv2.line(img2,(0,0),(511,511),(255,0,0),5,cv2.LINE_AA,3)
# 对比不同shift变量的效果
plt.figure(figsize = (10, 10))
plt.subplot(1, 2, 1), plt.imshow(img1), plt.axis('off'), plt.title("shift=0")
plt.subplot(1, 2, 2), plt.imshow(img2), plt.axis('off'), plt.title("shift=3")
想要画一个矩形,你需要确定函数的左上角顶点和右下角顶点的坐标。这次我们会在图像右上角画一个绿色的矩形。
void ellipse(img, center, axes,angle, startAngle, endAngle, color, thickness=1, lineType=8, shift=0);
import numpy as np
import cv2
import matplotlib.pyplot as plt
#创建一个黑色图片 np.zeros()返回一个填充为0的数组
img = np.zeros((512,512,3),np.uint8)
#画椭圆——需要输入中心点位置,长轴和短轴的长度,椭圆沿逆时针选择角度,椭圆沿顺时针方向起始角度和结束角度
cv2.ellipse(img,(256,256),(100,50),0,0,180,255,-1)
plt.imshow(img),plt.axis('off'), plt.title("shift=0")
要画一个矩形,你需要告诉函数的左上角顶点和右下角顶点的坐标。
rectangle(img, pt1, pt2,color, thickness=1, lineType=8, shift=0);
import numpy as np
import cv2
import matplotlib.pyplot as plt
#创建一个黑色图片 np.zeros()返回一个填充为0的数组
img = np.zeros((512,512,3),np.uint8)
cv2.rectangle(img,(384,0),(510,128),(0,255,0),3)
plt.imshow(img)
要画圆的话,只需要指定圆形的中心点坐标和半径大小。
circle(img, center, radius, color, thickness=1, lineType=8, shift=0);
import numpy as np
import cv2
import matplotlib.pyplot as plt
#创建两个黑色图片 np.zeros()返回一个填充为0的数组
img1 = np.zeros((512,512,3),np.uint8)
img2 = np.zeros((512,512,3),np.uint8)
#画圆
cv2.circle(img1,(100,150),63,(0,0,255),thickness=-1) #线型-1表示填充
# 画点
cv2.circle(img2, (100, 100), 5, (255, 0, 255), thickness=-1)
# 对比不同shift变量的效果
plt.figure(figsize = (10, 10))
plt.subplot(1, 2, 1), plt.imshow(img1), plt.axis('off')
plt.subplot(1, 2, 2), plt.imshow(img2), plt.axis('off')
画一个多边形,需要确定每个顶点的坐标,用这些点的坐标构建一个大小等于函数 Row x1x2的数组,行数就是点的数目。这个数组类型必须是int32.
注意
如果第三个参数是False ,我们得到的多边形是不闭合的(首尾不相连)。
cv2.polylines() 可以被用来画很多条线。只要把想要画的线放在一个列表中,将这个列表传给函数就行了。每条线都会被独立绘制,这比用cv2.line()一条一条的绘制要快多了。
import numpy as np
import cv2
import matplotlib.pyplot as plt
#创建一个黑色图片 np.zeros()返回一个填充为0的数组
img = np.zeros((512,512,3),np.uint8)
pts=np.array([[100,150],[20,30],[400,20],[300,300]], np.int32)
pts=pts.reshape((-1,1,2)) # 这里 reshape 的第一个参数为-1, 表明这一维的长度是根据后面的维度的计算出来的。
cv2.polylines(img,[pts],True,(255,0,255),cv2.LINE_AA) # 如果第三个参数是 False,我们得到的多边形是不闭合的(首尾不相连)。
plt.imshow(img)
在图片上绘制文字,你需要设置下列参数:
import numpy as np
import cv2
import matplotlib.pyplot as plt
#创建一个黑色图片 np.zeros()返回一个填充为0的数组
img = np.zeros((512,512,3),np.uint8)
font = cv2.FONT_HERSHEY_SIMPLEX
cv2.putText(img,'Opencv',(10,300),font,4,(255,255,255),2,cv2.LINE_AA)
plt.imshow(img)