您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# OpenCV如何绘制线条、矩形、圆弧线、椭圆弧线、多边形、添加文字
OpenCV作为计算机视觉领域的核心工具库,提供了丰富的绘图功能。本文将详细介绍如何使用OpenCV绘制基础几何图形和文字,涵盖线条、矩形、圆弧线、椭圆弧线、多边形以及文字添加等操作。
## 一、准备工作
### 1.1 安装OpenCV
```python
pip install opencv-python
import cv2
import numpy as np
# 创建空白画布(512x512像素,3通道BGR)
canvas = np.zeros((512, 512, 3), dtype=np.uint8)
canvas.fill(255) # 白色背景
cv2.line(img, pt1, pt2, color, thickness=1, lineType=cv2.LINE_8, shift=0)
img
: 目标图像pt1
: 起点坐标(x,y)pt2
: 终点坐标(x,y)color
: BGR格式颜色元组thickness
: 线宽(像素)lineType
: 线型(默认8连通)# 绘制红色对角线
cv2.line(canvas, (0,0), (511,511), (0,0,255), 5)
# 绘制绿色水平线
cv2.line(canvas, (100,200), (400,200), (0,255,0), 3)
cv2.rectangle(img, pt1, pt2, color, thickness=1, lineType=cv2.LINE_8, shift=0)
thickness=-1
: 表示填充矩形# 绘制蓝色边框矩形
cv2.rectangle(canvas, (50,50), (200,200), (255,0,0), 2)
# 绘制填充黄色矩形
cv2.rectangle(canvas, (300,300), (450,450), (0,255,255), -1)
cv2.ellipse(img, center, axes, angle, startAngle, endAngle, color, thickness=1, lineType=cv2.LINE_8, shift=0)
center
: 圆心坐标axes
: (长轴长度,短轴长度)angle
: 旋转角度(顺时针)startAngle
: 起始角度(3点钟方向为0度)endAngle
: 终止角度# 绘制90度圆弧
cv2.ellipse(canvas, (256,256), (100,50), 0, 0, 90, (128,0,128), 3)
# 绘制旋转45度的半圆
cv2.ellipse(canvas, (256,256), (80,80), 45, 0, 180, (0,128,128), 2)
椭圆弧线实际上是圆弧线的扩展形式,通过设置不同的长轴和短轴实现。
# 绘制完整椭圆
cv2.ellipse(canvas, (150,400), (60,30), 0, 0, 360, (255,0,0), 2)
# 绘制部分椭圆弧
cv2.ellipse(canvas, (350,400), (80,40), 30, 45, 270, (0,0,255), 3)
cv2.polylines(img, pts, isClosed, color, thickness=1, lineType=cv2.LINE_8, shift=0)
pts
: 顶点坐标数组(需为int32类型)isClosed
: 是否闭合多边形# 定义五边形顶点
pts = np.array([[100,50], [200,80], [180,200], [120,220], [50,150]], np.int32)
pts = pts.reshape((-1,1,2))
# 绘制多边形
cv2.polylines(canvas, [pts], True, (0,128,0), 3)
# 填充多边形(使用fillPoly)
cv2.fillPoly(canvas, [pts], (200,200,0))
cv2.putText(img, text, org, fontFace, fontScale, color, thickness=1, lineType=cv2.LINE_8, bottomLeftOrigin=False)
text
: 要绘制的字符串org
: 文字左下角坐标fontFace
: 字体类型fontScale
: 字体缩放因子FONT_HERSHEY_SIMPLEX = 0
FONT_HERSHEY_PLN = 1
FONT_HERSHEY_DUPLEX = 2
FONT_HERSHEY_COMPLEX = 3
FONT_HERSHEY_TRIPLEX = 4
FONT_HERSHEY_COMPLEX_SMALL = 5
FONT_HERSHEY_SCRIPT_SIMPLEX = 6
FONT_HERSHEY_SCRIPT_COMPLEX = 7
# 添加简单文字
cv2.putText(canvas, 'OpenCV', (50,450), cv2.FONT_HERSHEY_SIMPLEX, 2, (0,0,0), 3)
# 添加带样式的文字
cv2.putText(canvas, 'Python', (300,100),
cv2.FONT_HERSHEY_SCRIPT_COMPLEX,
1.5, (255,100,50), 2, cv2.LINE_AA)
# 创建新画布
canvas = np.zeros((600,800,3), np.uint8)
canvas.fill(240) # 浅灰色背景
# 绘制交通信号灯
cv2.circle(canvas, (400,150), 50, (0,0,255), -1) # 红灯
cv2.circle(canvas, (400,250), 50, (0,165,255), -1) # 黄灯
cv2.circle(canvas, (400,350), 50, (0,255,0), -1) # 绿灯
cv2.rectangle(canvas, (300,80), (500,420), (0,0,0), 3)
# 添加文字说明
cv2.putText(canvas, "STOP", (350,160), cv2.FONT_HERSHEY_SIMPLEX, 1, (255,255,255), 2)
cv2.putText(canvas, "READY", (350,260), cv2.FONT_HERSHEY_SIMPLEX, 1, (0,0,0), 2)
cv2.putText(canvas, "GO", (370,360), cv2.FONT_HERSHEY_SIMPLEX, 1, (0,0,0), 2)
# 显示结果
cv2.imshow("Drawing Demo", canvas)
cv2.waitKey(0)
cv2.destroyAllWindows()
# 使用LINE_AA抗锯齿线型
cv2.line(canvas, (0,0), (511,511), (0,0,0), 5, cv2.LINE_AA)
# 创建透明图层
overlay = canvas.copy()
cv2.rectangle(overlay, (100,100), (300,300), (0,0,255), -1)
cv2.addWeighted(overlay, 0.5, canvas, 0.5, 0, canvas)
cv2.arrowedLine(canvas, (400,100), (400,400), (255,0,255), 3, tipLength=0.1)
本文详细介绍了OpenCV的绘图功能,包括:
1. 线条绘制:cv2.line()
2. 矩形绘制:cv2.rectangle()
3. 圆弧/椭圆弧:cv2.ellipse()
4. 多边形绘制:cv2.polylines()
5. 文字添加:cv2.putText()
掌握这些基础绘图操作,可以为图像处理、计算机视觉项目添加可视化标注,是OpenCV应用开发的重要基础技能。
提示:所有绘图函数都会直接修改输入图像,如需保留原始图像,请先创建副本。 “`
(全文约1850字,包含代码示例和详细参数说明)
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。