Как нарисовать эллипс на изображении? - PullRequest
0 голосов
/ 18 июня 2020

Я использую эту функцию, чтобы нарисовать круг. Как я могу изменить отображение эллипса?

def circle_points(resolution, center, radius):
    """
    Generate points which define a circle on an image.Centre refers to the centre of the circle
    """   
    radians = np.linspace(0, 2*np.pi, resolution)
    c = center[1] + radius*np.cos(radians)#polar co-ordinates
    r = center[0] + radius*np.sin(radians)

    return np.array([c, r]).T

1 Ответ

0 голосов
/ 18 июня 2020

Простой способ - растянуть ось x и ось y на другой коэффициент, то есть заменить radius на x_semiaxis и y_semiaxis, чтобы обозначить полуоси эллипса :

def ellipse_points(resolution, center, x_semiaxis, y_semiaxis):
    """
    Generate points which define a ellipse on an image.

    Centre refers to the centre of the ellipse.
    """   
    radians = np.linspace(0, 2 * np.pi, resolution)
    x = center[0] + x_semiaxis * np.cos(radians)
    y = center[1] + y_semiaxis * np.sin(radians)
    return np.array([x, y])

Обратите внимание, что я использую более традиционную формулу, чтобы иметь x по косинусу и y по синусу, и я избегаю включения транспонирования, чтобы упростить построение. Вы можете легко вернуть его.

import matplotlib.pyplot as plt


plt.scatter(*ellipse_points(1000, (10, 20), 200, 100))
plt.scatter((10,), (20,))  # plot the center too
plt.gca().set_aspect('equal')

img

...