您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# cv2.ellipse()怎么使用
## 1. 函数概述
`cv2.ellipse()`是OpenCV中用于绘制椭圆的核心函数,它可以在图像上绘制不同样式的椭圆、圆弧或扇形。该函数提供了丰富的参数控制,能够满足各种计算机视觉和图像处理场景的需求。
### 基本函数原型
```python
cv2.ellipse(img, center, axes, angle, startAngle, endAngle, color[, thickness[, lineType[, shift]]])
img
: 输入图像(numpy数组)center
: 椭圆中心坐标(x,y)axes
: 主轴和次轴的长度(长轴,短轴)angle
: 旋转角度(顺时针方向,单位度)startAngle
: 起始角度(三点钟方向为0度)endAngle
: 结束角度color
: 椭圆颜色(BGR格式)thickness
: 线条粗细(-1表示填充)lineType
: 线条类型(默认8连通)shift
: 坐标小数点位数(默认为0)import cv2
import numpy as np
# 创建黑色背景图像
img = np.zeros((400, 600, 3), dtype=np.uint8)
# 绘制红色椭圆
cv2.ellipse(img,
(300, 200), # 中心坐标
(100, 50), # 轴长(长轴,短轴)
0, # 旋转角度
0, 360, # 起始和结束角度
(0, 0, 255), # 红色
2) # 线宽
cv2.imshow("Ellipse", img)
cv2.waitKey(0)
cv2.destroyAllWindows()
# 在上一示例基础上修改角度参数
cv2.ellipse(img,
(300, 200),
(100, 50),
45, # 旋转45度
0, 360,
(0, 255, 0),
2)
cv2.ellipse(img,
(300, 200),
(80, 40),
0, 0, 360,
(255, 0, 0),
-1) # thickness设为-1表示填充
通过调整startAngle
和endAngle
可以绘制部分椭圆:
# 绘制90度圆弧
cv2.ellipse(img, (100, 100), (50, 30), 0, 0, 90, (255,255,0), 2)
# 绘制扇形(连接中心点)
cv2.ellipse(img, (100, 100), (50, 30), 0, 0, 90, (255,255,0), 2)
cv2.line(img, (100,100), (150,100), (255,255,0), 2) # 起始边
cv2.line(img, (100,100), (100,70), (255,255,0), 2) # 结束边
# 在图像特定区域绘制椭圆
roi = img[100:300, 200:400]
cv2.ellipse(roi,
(100, 100), # 相对于ROI的坐标
(80, 40),
30, 0, 360,
(0, 255, 255),
2)
# 创建窗口和回调函数
def draw_ellipse(event, x, y, flags, param):
global img
if event == cv2.EVENT_LBUTTONDOWN:
img = np.zeros((400,600,3), np.uint8)
cv2.ellipse(img, (x,y), (100,50), 0, 0, 360, (0,255,255), 2)
cv2.namedWindow("Interactive")
cv2.setMouseCallback("Interactive", draw_ellipse)
while True:
cv2.imshow("Interactive", img)
if cv2.waitKey(1) == 27: # ESC退出
break
angle
: 椭圆整体旋转角度(主轴与水平轴的夹角)startAngle
/endAngle
: 相对于旋转后椭圆的局部角度系统可选参数:
- cv2.LINE_4
: 4连通线
- cv2.LINE_8
: 8连通线(默认)
- cv2.LINE_AA
: 抗锯齿线
# 比较不同线型
cv2.ellipse(img, (150,150), (50,30), 0, 0, 270, (255,0,0), 1, cv2.LINE_4)
cv2.ellipse(img, (150,250), (50,30), 0, 0, 270, (0,255,0), 1, cv2.LINE_8)
cv2.ellipse(img, (150,350), (50,30), 0, 0, 270, (0,0,255), 1, cv2.LINE_AA)
shift
参数减少计算量# 假设已检测到人脸和眼睛
face_img = cv2.imread("face.jpg")
left_eye = (150, 120) # 左眼中心
# 用椭圆标记眼睛区域
cv2.ellipse(face_img,
left_eye,
(25, 15), # 眼睛近似椭圆尺寸
0, 0, 360,
(0, 255, 0),
1)
# 检测圆形零件并标记为椭圆
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
circles = cv2.HoughCircles(gray, cv2.HOUGH_GRADIENT, 1, 20)
if circles is not None:
for (x,y,r) in circles[0]:
cv2.ellipse(img, (x,y), (r,r), 0, 0, 360, (0,0,255), 2)
# 创建饼状图
data = [30, 50, 20] # 各部分比例
colors = [(0,0,255), (0,255,0), (255,0,0)]
start_angle = 0
for value, color in zip(data, colors):
end_angle = start_angle + int(360 * value / sum(data))
cv2.ellipse(img, (300,300), (150,150), 0, start_angle, end_angle, color, -1)
start_angle = end_angle
# 高效绘制多个椭圆
centers = [(100,100), (200,200), (300,300)]
axes = [(50,30), (60,40), (70,50)]
for center, axis in zip(centers, axes):
cv2.ellipse(img, center, axis, 0, 0, 360, (255,255,255), 1)
cv2.circle()
实际上是cv2.ellipse()
的特例:
# 以下两行等价
cv2.circle(img, (100,100), 50, (255,0,0), 2)
cv2.ellipse(img, (100,100), (50,50), 0, 0, 360, (255,0,0), 2)
椭圆参数方程:
x = cx + a*cosθ*cosφ - b*sinθ*sinφ
y = cy + a*cosθ*sinφ + b*sinθ*cosφ
其中φ为旋转角度,θ为参数角度
cv2.ellipse()
是OpenCV中功能强大的绘图函数,通过掌握其参数组合,可以实现:
- 标准椭圆和圆形绘制
- 旋转椭圆和部分椭圆
- 圆弧和扇形绘制
- 各种可视化效果
建议读者通过实际项目练习掌握该函数,结合其他OpenCV功能开发更复杂的计算机视觉应用。
注意:本文所有代码示例基于OpenCV 4.x版本,使用前请确保已正确安装OpenCV库。 “`
这篇文章共计约2350字,详细介绍了cv2.ellipse()
函数的使用方法,包含基础用法、高级技巧、实际案例和性能优化等内容,采用Markdown格式编写,便于阅读和代码复制。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。