gpt4 book ai didi

python - 使用 Python 了解 Open CV 中的椭圆参数

转载 作者:行者123 更新时间:2023-12-05 01:40:25 27 4
gpt4 key购买 nike

我正在尝试使用 Open CV 绘制弧线,使用 cv2.ellipse 函数我试着阅读相同的文档,但我发现它非常困惑。在我的例子中它是一个圆弧,所以 axes_x 和 axes_y 是相同的,即半径。我的轴应该是什么,我应该在哪个方向计算开始和结束角度?这个旋转角度是多少?给定的是功能 -cv2.ellipse(img, center, axes, angle, startAngle, endAngle, color[, thickness[, lineType[, shift]]])

import cv2
import numpy as np

def create_blank(height, width, color):

blank_image = np.zeros((int(height), int(width), 3), np.uint8)
blank_image[:, :] = color
return blank_image

def draw_arc(image):
height, width = image.shape[0:2]
# Ellipse parameters
radius = 100
center = (width / 2, height/2)
axes = (radius, radius)
angle = 0
startAngle = 135
endAngle = 180
cv2.line(image, (0, 150), (300, 150), (0, 0, 0), 2, cv2.CV_AA)
cv2.line(image, (150, 0), (150, 300), (0, 0, 0), 2, cv2.CV_AA)
cv2.ellipse(image, center, axes, angle, startAngle, endAngle, (0, 0, 0), 2, cv2.CV_AA)
cv2.imshow("ellipse", image)


# Create new blank 300x150 white image
width, height = 300, 300
image = create_blank(width, height, color=WHITE)
draw_arc(image)

cv2.waitKey(0)
cv2.destroyAllWindows()

当我的 startAngle 为 135 且 endAngle 为 180 时,结果看起来像 enter image description here

而当 startAngle 为 0 且 endAngle 为 90 时,结果看起来像 enter image description here

所以这让人很困惑,圆弧在哪个方向旋转。

最佳答案

您可以真正轻松地查看参数的变化如何影响椭圆的绘制。这是一个简单的代码:

import numpy as np
import cv2

center = (200, 200) # x,y
axes = (100, 75) # first, second
angle = 0. # clockwise, first axis, starts horizontal
for i in range(360):
image = np.zeros((400, 400, 3)) # creates a black image
image = cv2.ellipse(image, center, axes, angle, 0., 360, (0,0,255))
image = cv2.ellipse(image, center, axes, angle, 0., i, (0,255,0))
cv2.imshow("image", image)
cv2.waitKey(5)

cv2.waitKey(0)
cv2.destroyAllWindows()

这会做类似的事情:

enter image description here

让我们看一下参数:

center -> 椭圆中心所在的 x 和 y 元组。

axes -> 第一和第二轴半径(总尺寸的一半)。如果角度为 0,第一个是水平的,第二个是垂直的。

角度 -> 整个椭圆的角度,即如果顺时针移动第一个轴

startAngle -> 你想开始画弧的地方,例如 0 就像我的示例图像(在第一个轴上),但如果角度有一个值,那么 0 将以同样的方式旋转。

endAngle -> 在您想停止绘制的地方,您可以看到我在示例中对其进行了更改以绘制一个渐增的椭圆。

如果你想要一个半径为 50px 的圆弧,比方说从 60 度到 120 度,但逆时针方向(360 - 开始/结束角度)你可以这样做:

image = cv2.ellipse(image, (100,100), (50,50), 0.0, 360-120, 360-60, (0,255,0))

如果您对其中任何一个有疑问,请随时在评论中提问

关于python - 使用 Python 了解 Open CV 中的椭圆参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56630157/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com