- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有一个 RGB 三元组列表,我想以这样一种方式绘制它们,使它们形成类似光谱的东西。
我已将它们转换为 HSV,人们似乎建议这样做。
from PIL import Image, ImageDraw
import colorsys
def make_rainbow_rgb(colors, width, height):
"""colors is an array of RGB tuples, with values between 0 and 255"""
img = Image.new("RGBA", (width, height))
canvas = ImageDraw.Draw(img)
def hsl(x):
to_float = lambda x : x / 255.0
(r, g, b) = map(to_float, x)
h, s, l = colorsys.rgb_to_hsv(r,g,b)
h = h if 0 < h else 1 # 0 -> 1
return h, s, l
rainbow = sorted(colors, key=hsl)
dx = width / float(len(colors))
x = 0
y = height / 2.0
for rgb in rainbow:
canvas.line((x, y, x + dx, y), width=height, fill=rgb)
x += dx
img.show()
但是,结果看起来不太像漂亮的彩虹-y 光谱。我怀疑我需要转换为不同的颜色空间或以不同方式处理 HSL 三元组。
有谁知道我需要做什么才能让这些数据看起来像彩虹?
更新:
我在研究希尔伯特曲线并重新审视了这个问题。根据 RGB 值(两个图像中的相同颜色)沿希尔伯特曲线的位置对 RGB 值进行排序会产生一个有趣的(如果仍然不完全令人满意)结果:
最佳答案
您正在尝试将三维空间转换为一维空间。正如 Oli 所说,不能保证你能从中做出令人愉悦的彩虹。
您可以做的是根据饱和度和明度/亮度将颜色“分桶”到几个不同的类别,然后在类别内排序,以获得几个独立的渐变。例如,经典彩虹首先是高饱和度颜色,然后是中饱和度高值颜色(粉彩),然后是低饱和度(灰色)。
或者,如果您只关心彩虹,请转换为 hsl,然后将饱和度设置为 1.0,并将值设置为 0.5,转换回 rgb 并渲染它而不是原始颜色。
关于python - 将 RGB 三元组列表排序为光谱,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6208980/
使用 Redshift 光谱时,您似乎只能导入提供位置直到文件夹的数据,并且导入文件夹内的所有文件。 有没有办法从包含多个文件的文件夹中导入仅导入一个文件。当提供带有 filename 的完整路径时,
我正在评估 Athena 和 Redshift Spectrum。两者都有相同的目的,Spectrum 需要一个 Redshift 集群,而 Athena 是纯粹的无服务器集群。 Athena 使用
我们目前生成每日 CSV 导出,并将其上传到 S3 存储桶,结构如下: |--reportDate- |-- part0.csv.gz |-- part1.csv.gz 我们希望能够
我在 S3 中有一个 JSON 结构数组,它已被 Glue 成功抓取和编目。 [{"key":"value"}, {"key":"value"}] 我正在使用自定义分类器: $[*] 然而,当尝试从
我是一名优秀的程序员,十分优秀!