Bootstrap

opencv 学习(3)


本部分图形绘制

本节内容比较简单 直接上代码

画直线

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()

在这里插入图片描述

;