代码之家  ›  专栏  ›  技术社区  ›  Rohit Pandey

如何获得表示反射光的色阶

  •  1
  • Rohit Pandey  · 技术社区  · 6 年前

    我从下面的 Wikipedia page on Dodecahedrons . 它显示了一个旋转缓慢的四色体。如果你仔细观察,很明显,假设屏幕外某处有一个光源。如果一个面向观察者反射更多的光,它会显得更亮,如果它反射更少的光,它会显得更暗。我有一个想法,我可以得到一个度量,一个面在某个旋转时反射回来的光的数量。我还可以将度量缩放到0到255之间的值(大多数色阶都假定该值)。然而,当度量值较高时,如何获得看起来像明亮反射蓝色的实际rgb值,当度量值较低时,如何获得看起来像深蓝色的实际rgb值?

    enter image description here

    2 回复  |  直到 6 年前
        1
  •  1
  •   PM 2Ring    6 年前

    我建议您使用标准 colorsys 模块,并在HSV或HLS颜色坐标系中工作。通常,您需要确定基色的色调和饱和度,然后改变值或亮度以创建所需的色调范围。

    下面是一个使用Numpy从给定色调创建HLS栅格的简短示例。

    from colorsys import hls_to_rgb
    import numpy as np
    from PIL import Image
    
    def ls_grid(hue, numcolors, scale):
        a = np.linspace(0, 1, num=numcolors, endpoint=True)
        grid = np.array([[hls_to_rgb(hue, lite, sat) for sat in a] for lite in a])
        grid = (0.5 + 255 * grid).astype(np.uint8)
        return grid.repeat(scale, axis=1).repeat(scale, axis=0)
    
    hue = 0.585
    numcolors, scale = 32, 16
    grid = ls_grid(hue, numcolors, scale)
    img = Image.fromarray(grid)
    img.show()
    img.save('litesat.png')
    

    lightness-saturation grid

        2
  •  1
  •   rnso    6 年前

    从高RGB值开始,逐渐降低R和G,以获得较深的蓝色色调。下图基于这些RGB值(R和G以20为单位减少):

    230 230 250
    210 210 250
    190 190 250
    170 170 250
    150 150 250
    

    enter image description here