椭圆的长轴和短轴的平均值为(1.3,0.7)、(1.0,0.5)和(0.75、0.25).
这些轴的大小与平均值相差10%。
各生成15个。
1.定义椭圆生成函数:长短轴平均值,数量,与平均值相差最大百分比;
2.定义长轴短轴的平均值;
3.生成椭圆,定义图片像素和dpi;
4.创建画布;
5.绘制所有椭圆;
6.将生成的椭圆命名为'ellipses.png'存入文件夹中。
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.patches import Ellipse
import cv2
import time
# 椭圆生成函数
def generate_ellipses(mean_values, count=15, tolerance=0.1):
ellipses = []
for mean in mean_values:
for _ in range(count):
long_axis = np.random.uniform(mean[0] * (1 - tolerance), mean[0] * (1 + tolerance))
short_axis = np.random.uniform(mean[1] * (1 - tolerance), mean[1] * (1 + tolerance))
angle = np.random.uniform(0, 360)
ellipses.append((long_axis, short_axis, angle))
return ellipses
# 定义长轴短轴的平均值
mean_axes = [(1.3, 0.7), (1.0, 0.5), (0.75, 0.25)]
# 生成椭圆
ellipses = generate_ellipses(mean_axes)
image_width, image_height = 1000, 1000 # 图像宽高为1000像素
dpi_value = 96 # 设置dpi为96,这是许多显示器的默认值
# 创建画布和轴对象
fig, ax = plt.subplots(subplot_kw={'aspect': 'equal'}, figsize=(image_width / dpi_value, image_height / dpi_value), dpi=dpi_value)
ax.set_xlim(-10, 10) # 设置x轴的范围
ax.set_ylim(-10, 10) # 设置y轴的范围
# 绘制所有椭圆
for i, (long_axis, short_axis, angle) in enumerate(ellipses):
ellipse = Ellipse(xy=(np.random.uniform(-10, 10), np.random.uniform(-10, 10)),
width=long_axis * 2, # width为长轴的两倍
height=short_axis*2, # height为短轴的两倍
angle=angle, edgecolor='black', fc='black') # 边缘和填充色均为黑色,可改
ax.add_patch(ellipse)
plt.subplots_adjust(left=0, right=1, top=1, bottom=0) # 减少图像填充
plt.axis('off') # 关闭坐标轴
plt.savefig('ellipses.png', bbox_inches='tight', pad_inches=0, dpi=dpi_value)
plt.close(fig)
结果展示: