opencv 学习(3)

文章目录

本部分图形绘制

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

画直线

python 复制代码
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)

画圆

python 复制代码
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()

画矩形

python 复制代码
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()

画多边形

python 复制代码
#绘制多边形


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

文字绘制

python 复制代码
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()  # 关闭窗口

画板

python 复制代码
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()
相关推荐
飞睿科技22 分钟前
乐鑫代理商飞睿科技,2025年AI智能语音助手市场发展趋势与乐鑫芯片解决方案分析
人工智能
许泽宇的技术分享24 分钟前
从新闻到知识图谱:用大模型和知识工程“八步成诗”打造科技并购大脑
人工智能·科技·知识图谱
丰锋ff27 分钟前
计网学习笔记第2章 物理层(灰灰题库)
笔记·学习
坤坤爱学习2.038 分钟前
求医十年,病因不明,ChatGPT:你看起来有基因突变
人工智能·ai·chatgpt·程序员·大模型·ai编程·大模型学
Chef_Chen1 小时前
从0开始学习R语言--Day39--Spearman 秩相关
开发语言·学习·r语言
蹦蹦跳跳真可爱5891 小时前
Python----循环神经网络(Transformer ----注意力机制)
人工智能·深度学习·nlp·transformer·循环神经网络
空中湖3 小时前
tensorflow武林志第二卷第九章:玄功九转
人工智能·python·tensorflow
lishaoan773 小时前
使用tensorflow的线性回归的例子(七)
人工智能·tensorflow·线性回归
千宇宙航6 小时前
闲庭信步使用SV搭建图像测试平台:第三十一课——基于神经网络的手写数字识别
图像处理·人工智能·深度学习·神经网络·计算机视觉·fpga开发
onceco7 小时前
领域LLM九讲——第5讲 为什么选择OpenManus而不是QwenAgent(附LLM免费api邀请码)
人工智能·python·深度学习·语言模型·自然语言处理·自动化