OpenCV--绘制各种图形

绘制各种图形

代码和笔记

import cv2
import numpy as np
from PIL import ImageFont, ImageDraw, Image


"""
绘制各种图形
"""

# 创建纯黑背景图
img = np.zeros((480, 640, 3), np.uint8)

""""
line:线,rectangle:矩形
pt1, pt2为图形的起始位置,thickness粗细,lineType控制光滑程度,shift一般不加
line(img, pt1, pt2, color, thickness, lineType, shift),矩形(可用于捕捉人脸)类似
"""
# cv2.line(img, (10, 20), (300, 400), (0, 0, 255), 5, 4)
# cv2.line(img, (80, 100), (400, 500), (0, 0, 255), 5, 16)

"""
圆circle pt1(center), pt2(radius)这里变为圆心坐标和半径 注意OpenCV坐标行列和numpy中的相反
角度为逆时针
ellipse(img, center, axes, angel, startAngle, endAngle, color, thickness, lineType, shift)
椭圆 center圆心坐标, axes长短轴的一半  angel椭圆的角度 startAngle, endAngle从那个角度开始,到那个角度结束
"""

# cv2.circle(img, (320, 240), 50, (0, 0, 255), 5, 16)
# cv2.ellipse(img, (320, 240), (100, 50), 0, 0, 360, [0, 0, 255], 5, 16)

"""
绘制多边形polylines(img, pts, isClosed, color,thickness, lineType, shift )
pts 多边形点的坐标(一个列表, 三维(必须是int32位及以上的)), isClosed 是否闭合
填充多边形
"""

# pts = np.array([(250, 100), (150, 300), (50, 280)], np.int32)
# cv2.polylines(img, [pts], True, (0, 0, 255), 5)
# cv2.fillPoly(img, [pts], (0, 0, 255))

"""
绘制文本 putText(img, text, org, fontFace, fontScale, color, thickness, lineType, bottomLeftOrigin)
org文本左下角坐标 fontFace字体类型 fontScale大小
"""

cv2.putText(img, 'Hello OpenCv', (40, 40), cv2.FONT_HERSHEY_PLAIN, 5, [0, 0, 255])

# 纯白背景(也可以用图片)  text中文会乱码, 使用pillow包解决PIL
img1 = np.full((200, 200, 3), fill_value=255, dtype=np.uint8)
# 导入字体文件
font = ImageFont.truetype('./xx.ttc', 15)
# 创建一个pillow图片
img2 = Image.fromarray(img1)
draw = ImageDraw.Draw(img2)
# 利用draw去绘制中文
draw.text((10, 150), '你好呀', font=font, fill=(0, 255, 0, 0))
# 重新变回ndarray
img3 = np.array(img2)
cv2.imshow('img', img3)

cv2.imshow('draw', img)
cv2.waitKey(0)
cv2.destroyAllWindows()


### OpenCV-Python 绘制图形的基础方法 OpenCV 是一个强大的计算机视觉库,支持多种图像处理功能。尽管它主要用于图像和视频分析,但也提供了基本的绘图函数来创建简单的形状和线条[^1]。 以下是使用 `cv2` 库绘制常见几何图形的一些基础示例: #### 导入必要的模块 在开始之前,确保已导入所需的 Python 模块: ```python import cv2 import numpy as np ``` --- #### 创建空白画布 为了绘制任何图形,通常会先创建一块黑色背景作为画布: ```python canvas = np.zeros((500, 500, 3), dtype=np.uint8) # 高度500px,宽度500px,RGB三通道 ``` --- #### 绘制直线 可以使用 `cv2.line()` 函数绘制一条线段: ```python start_point = (50, 50) # 起始坐标 end_point = (400, 400) # 结束坐标 color = (255, 0, 0) # BGR颜色模式下的蓝色 thickness = 2 # 线条粗细 cv2.line(canvas, start_point, end_point, color, thickness) ``` --- #### 绘制矩形 通过 `cv2.rectangle()` 可以定义一个矩形区域: ```python top_left_corner = (100, 100) # 左上角顶点 bottom_right_corner = (300, 300) # 右下角顶点 color = (0, 255, 0) # 绿色 thickness = 3 # 边框厚度 (-1表示填充) cv2.rectangle(canvas, top_left_corner, bottom_right_corner, color, thickness) ``` --- #### 绘制圆形 利用 `cv2.circle()` 方法可绘制圆圈或椭圆: ```python center_coordinates = (250, 250) # 圆心位置 radius = 50 # 半径大小 color = (0, 0, 255) # 红色 thickness = -1 # 填充内部 cv2.circle(canvas, center_coordinates, radius, color, thickness) ``` --- #### 添加文字 可以通过 `cv2.putText()` 将文本渲染到图片上: ```python text = "Hello OpenCV" position = (50, 450) # 文本起始位置 font = cv2.FONT_HERSHEY_SIMPLEX # 字体样式 scale = 1 # 字号比例 color = (255, 255, 255) # 白色字体 thickness = 2 # 笔触粗细 cv2.putText(canvas, text, position, font, scale, color, thickness) ``` --- #### 显示结果 最后调用窗口展示所绘制的内容并等待按键退出: ```python cv2.imshow('Canvas', canvas) cv2.waitKey(0) cv2.destroyAllWindows() ``` 以上代码片段展示了如何借助 OpenCV 的内置工具完成一些简单而直观的艺术创作。 --- #### 完整示例程序 下面是一个综合性的例子,演示上述所有操作: ```python import cv2 import numpy as np # 初始化画布 canvas = np.zeros((500, 500, 3), dtype=np.uint8) # 绘制直线 cv2.line(canvas, (50, 50), (400, 400), (255, 0, 0), 2) # 绘制矩形 cv2.rectangle(canvas, (100, 100), (300, 300), (0, 255, 0), 3) # 绘制圆形 cv2.circle(canvas, (250, 250), 50, (0, 0, 255), -1) # 添加文字 cv2.putText(canvas, "OpenCV Drawing", (50, 450), cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 255, 255), 2) # 展示最终效果 cv2.imshow('Drawing Example', canvas) cv2.waitKey(0) cv2.destroyAllWindows() ``` 此脚本能帮助理解 OpenCV 中不同类型的绘图命令及其参数设置方式。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

醉后才知酒浓

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值