本部分图形绘制
本节内容比较简单 直接上代码
画直线
import cv2
import numpy as np
## 本节画直线
## line 参数介绍
## image 在那个图像上面 画线
## 开始点借宿点 指定先的开始和结束的位置
## 颜色 线宽 线性
## shift 坐标轴缩放比例
image =np.zeros((480,640,3),np.uint8)
cv2.line(image,(10,10),(300,400),(0,0,255),5,4)
cv2.imshow("demo",image)
cv2.waitKey(0)
画圆
import cv2
import numpy as np
# 创建一个黑色的图像
image = np.zeros((500, 500, 3), dtype=np.uint8)
# 椭圆的中心坐标 (x, y)
center = (250, 250)
# 椭圆的长轴和短轴半径
axes = (200, 100)
# 椭圆的旋转角度(以度为单位)
angle = 0
# 椭圆的开始角度和结束角度(以度为单位),0到360度表示完整的椭圆
start_angle = 0
end_angle = 360
# 椭圆的颜色 (B, G, R) 和线型
color = (0, 255, 0) # 绿色
thickness = 2 # 线宽
# 使用 cv2.ellipse 函数绘制椭圆
cv2.ellipse(image, center, axes, angle, start_angle, end_angle, color, thickness)
# 显示图像
cv2.imshow('Ellipse', image)
# 等待按键事件然后关闭窗口
cv2.waitKey(0)
cv2.destroyAllWindows()
画矩形
import cv2
import numpy as np
# 创建一个黑色的图像
image = np.zeros((500, 500, 3), dtype=np.uint8)
# 矩形的左上角坐标 (x1, y1) 和右下角坐标 (x2, y2)
top_left_corner = (50, 50)
bottom_right_corner = (450, 450)
# 矩形的颜色 (B, G, R) 和线型
color = (0, 0, 255) # 红色
thickness = 2 # 线宽
# 使用 cv2.rectangle 函数绘制矩形
cv2.rectangle(image, top_left_corner, bottom_right_corner, color, thickness)
# 显示图像
cv2.imshow('Rectangle', image)
# 等待按键事件然后关闭窗口
cv2.waitKey(0)
cv2.destroyAllWindows()
画多边形
#绘制多边形
import cv2
import numpy as np
# 创建一个黑色的图像
image = np.zeros((500, 500, 3), dtype=np.uint8)
# 六边形的中心坐标和半径
center = (250, 250)
radius = 100
# 计算六边形的顶点(每60度一个顶点)
angles = np.linspace(0, 2 * np.pi, 7, endpoint=False)
vertices = np.round(np.vstack([radius * np.cos(angles) + center[0], radius * np.sin(angles) + center[1]]).T).astype(int)
# 将顶点转换为适合polylines的格式:[N, 1, 2],其中N是点的数量
vertices = [vertices.reshape((-1, 1, 2))]
# 六边形的颜色 (B, G, R) 和线型
color = (0, 255, 0) # 绿色
thickness = 2 # 线宽
isClosed = True # 表示多边形是闭合的
# 使用 cv2.polylines 函数绘制六边形
cv2.polylines(image, vertices, isClosed, color, thickness)
# 添加注释文本
font = cv2.FONT_HERSHEY_SIMPLEX
font_scale = 0.5
color_text = (255, 255, 255) # 白色文本
thickness_text = 1
# 在图像上添加文本注释
cv2.putText(image, 'Hexagon', (center[0] - 20, center[1] - 20), font, font_scale, color_text, thickness_text, cv2.LINE_AA)
# 显示图像
cv2.imshow('Hexagon', image)
# 等待按键事件然后关闭窗口
cv2.waitKey(0)
cv2.destroyAllWindows()
文字绘制
import cv2
import numpy as np
# 创建一个空白的图像(例如,黑色背景)
image_width, image_height = 800, 600 # 你可以根据需要调整大小
image = np.zeros((image_height, image_width, 3), dtype=np.uint8) # 3通道用于彩色图像
# 要绘制的文本
text = "MAN what can i say"
# 设置文本参数
font = cv2.FONT_HERSHEY_SIMPLEX # 字体类型
font_scale = 1.5 # 字体大小比例,可以根据需要调整
thickness = 2 # 文本线条粗细
color = (255, 255, 255) # 白色文本
# 获取文本的边界框大小(宽度和高度)
(text_width, text_height), baseline = cv2.getTextSize(text, font, font_scale, thickness)
# 计算文本在图像中心的位置
# 注意:getTextSize返回的是文本的底部边界,所以我们需要从中心高度中减去文本高度的一半再加上基线偏移
center_x = image_width // 2
center_y = image_height // 2 + text_height // 2 - baseline
# 在图像中心绘制文本
cv2.putText(image, text, (center_x - text_width // 2, center_y), font, font_scale, color, thickness, cv2.LINE_AA)
# 显示图像
cv2.imshow('Text in Center', image)
cv2.waitKey(0) # 等待按键
cv2.destroyAllWindows() # 关闭窗口
画板
import cv2
import numpy as np
# 初始化一个空白的图像(黑色背景)
image_width, image_height = 800, 600
image = np.zeros((image_height, image_width, 3), dtype=np.uint8)
trajectory = [] # 存储鼠标移动的轨迹点
drawing = False # 标记是否正在绘图
# 鼠标回调函数
def draw_line(event, x, y, flags, param):
global drawing, trajectory
if event == cv2.EVENT_MOUSEMOVE:
if drawing:
trajectory.append((x, y)) # 添加当前点到轨迹列表中
elif event == cv2.EVENT_LBUTTONDOWN:
drawing = True
trajectory.clear() # 清空轨迹列表
trajectory.append((x, y)) # 添加起始点到轨迹列表中
elif event == cv2.EVENT_LBUTTONUP:
drawing = False
# 创建窗口并设置鼠标回调函数
cv2.namedWindow('Drawing Board')
cv2.setMouseCallback('Drawing Board', draw_line)
# 显示循环
while True:
# 清空图像(每次循环都重新绘制轨迹)
image.fill(0)
print("111111111111111")
# 如果正在绘图且有轨迹点,则绘制轨迹
if drawing and trajectory:
for i in range(1, len(trajectory)):
x1, y1 = trajectory[i-1]
x2, y2 = trajectory[i]
cv2.line(image, (x1, y1), (x2, y2), (255, 255, 255), 5) # 白色线条,线宽为5
print("222222")
# 显示当前图像
cv2.imshow('Drawing Board', image)
print("3333333")
# 检查是否按下ESC键以退出循环
if cv2.waitKey(1) & 0xFF == 27:
break
# 释放窗口并销毁所有OpenCV窗口
cv2.destroyAllWindows()