📜  cmap perlin 噪声 python (1)

📅  最后修改于: 2023-12-03 14:40:07.110000             🧑  作者: Mango

使用 Perlin 噪声生成渐变色彩

生成渐变色彩通常需要在不同区域使用不同的颜色,而 Perlin 噪声可以生成连续但随机的值,在这里可以将这些值映射到颜色上。

准备工作

安装 noise 库:

pip install noise
示例代码
import noise
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.colors as colors

# 设置随机种子,保证每次运行生成的图形一致
np.random.seed(0)

# 图形的宽度和高度,单位为像素
width = 800
height = 600

# 生成 Perlin 噪声
scale = 100.0
octaves = 6
persistence = 0.5
lacunarity = 2.0
seed = np.random.randint(0, 100)
world = np.zeros((height, width))
for i in range(height):
    for j in range(width):
        world[i][j] = noise.pnoise2(i / scale,
                                    j / scale,
                                    octaves=octaves,
                                    persistence=persistence,
                                    lacunarity=lacunarity,
                                    repeatx=width,
                                    repeaty=height,
                                    base=seed)

# 创建 colormap,并设定范围为 [0,1]
color_start = '#0077c3'
color_end = '#f5c800'
cmap = colors.LinearSegmentedColormap.from_list('perlin', [color_start, color_end], N=256)
cmap.set_under(color_start)
cmap.set_over(color_end)

# 显示图形
fig, ax = plt.subplots(figsize=(10, 8))
ax.imshow(world, cmap=cmap, interpolation='bicubic', norm=colors.Normalize(vmin=0, vmax=1), origin='upper')
ax.axis('off')
plt.show()
解释说明
  • 使用 noise 库的 pnoise2 函数生成二维 Perlin 噪声
  • octaves 表示噪声的层数,层数越高表示生成的噪声越细腻
  • persistence 表示每一层所占的比重,取值范围为 [0,1]
  • lacunarity 表示每一层所占的空间频率,取值通常为大于 1 的实数
  • repeatxrepeaty 表示噪声的重复次数,设定为 widthheight 可以避免图形的边缘出现同一颜色的情况
  • 设定 underover 颜色可以避免出现黑色和白色的情况
  • Normalize 类可以将值域范围映射到 [0,1]
  • imshow 函数可以将噪声数组映射到图像上,并使用设定的 colormap 进行渐变着色