
import cv2
import numpy as np
import matplotlib.pylab as plt
import matplotlib as mpl
# 绘制线
# 生成一个空的黑底图像
# np.zeros()有两个参数,一个是创建的图片矩阵大小,另一个是数据类型。
# 512,512是像素(第一个512 像素 高,第二个512 像素 宽),3指BGR三种颜色。
img = np.zeros((512, 512, 3), np.uint8)
img_line = cv2.line(img, # 目标图像
(0, 0), # 起点
(256, 256), # 终点
(255, 0, 0), # 颜色
5) # 粗细
img_line = cv2.cvtColor(img_line, cv2.COLOR_BGR2RGB)
# plt.imshow(img_line)
# plt.show()
# 绘制矩形
img = np.zeros((512, 512, 3), np.uint8)
img_rectangle = cv2.rectangle(img, # 目标图像
(128, 128), # 顶点
(256, 256), # 相对的顶点
(0, 255, 0), # 颜色
3) # 粗细
img_rectangle = cv2.cvtColor(img_rectangle, cv2.COLOR_BGR2RGB)
# 绘制圆形
img = np.zeros((512, 512, 3), np.uint8)
cv2.circle(img, # 目标图像
(256, 256), # 圆心
256, # 半径
(0, 0, 255), # 颜色
-1) # 填充
img_circle = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
# 绘制椭圆形
img = np.zeros((512, 512, 3), np.uint8)
cv2.ellipse(img, # 目标图像
(256, 256), # 中心
(256, 128), # 长轴、短轴
0, # 逆时针旋转角度
0, # 开始角度
360, # 结束角度
(0, 0, 255), # 颜色
-1) # 填充
img_ellipse = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
# 绘制多边形
img = np.zeros((512, 512, 3), np.uint8)
pts = np.array([[50, 50], [400, 100], [462, 462], [100, 400]], np.int64)
pts = pts.reshape((-1, 1, 2))
cv2.polylines(img, # 目标图像
[pts], # 顶点
True, # 是否闭合
(0, 0, 255), # 颜色
3) # 粗细
img_poly = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
# 添加文字
img = np.zeros((512, 512, 3), np.uint8)
font = cv2.FONT_HERSHEY_SIMPLEX
cv2.putText(img, # 目标图像
"test", # 文字
(10, 300), # 文本框左下角
font, # 文字字体
4, # 文字大小
(255, 255, 255), # 文字颜色
3, # 文字粗细
cv2.LINE_AA) # 文字线型
img_put = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
# 解决plt 画图中文不显示问题
mpl.rcParams['font.sans-serif'] = ['SimHei'] # 指定默认字体为黑体
mpl.rcParams['axes.unicode_minus'] = False # 正常显示负号
# 显示图像
# plt.subplot(nrows, ncols, index)
# 表示在当前画布的右上角创建一个1行3列的绘图区域,同时 选择在第 1 个位置绘制子图。
plt.subplot(1, 7, 1)
plt.xticks([]), plt.yticks([]) # 隐藏x和y轴
plt.imshow(img_line)
plt.title('线')
plt.subplot(1, 7, 2)
plt.xticks([]), plt.yticks([]) # 隐藏x和y轴
plt.imshow(img_rectangle)
plt.title('矩形')
plt.subplot(1, 7, 3)
plt.xticks([]), plt.yticks([]) # 隐藏x和y轴
# plt.imshow(blur, 'gray')
plt.imshow(img_circle)
plt.title('圆形')
plt.subplot(1, 7, 4)
plt.xticks([]), plt.yticks([]) # 隐藏x和y轴
plt.imshow(img_ellipse)
plt.title('椭圆形')
plt.subplot(1, 7, 5)
plt.xticks([]), plt.yticks([]) # 隐藏x和y轴
plt.imshow(img_poly)
plt.title('多边形')
plt.subplot(1, 7, 6)
plt.xticks([]), plt.yticks([]) # 隐藏x和y轴
plt.imshow(img_put)
plt.title('文字')
plt.show()