python 生成长短轴平均值固定的随机椭圆

该文章详细描述了如何利用Python中的numpy和matplotlib库生成一系列椭圆,每个椭圆的长轴和短轴的尺寸围绕给定的平均值随机变化,且与平均值有10%的偏差。然后将这些椭圆绘制在图像上并保存为ellipses.png。
摘要由CSDN通过智能技术生成

椭圆的长轴和短轴的平均值为(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)

 结果展示:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值