python - 如何获得代表反射光的色标

标签 python image colors python-imaging-library

我从 Wikipedia page on Dodecahedrons 得到了下面这张精彩的图片。它显示了一个缓慢旋转的 Tetroid。如果你仔细观察,很明显,假设是屏幕外某处有光源。如果脸部向观察者反射更多的光,则看起来更亮,如果反射回的光更少,则看起来更暗。我有一个关于如何获得面部在特定旋转时反射回来的光量的度量的想法。我还可以将指标缩放到 0 到 255 之间的值(大多数色标均采用该值)。但是,当指标较高时,如何获得看起来像明亮的反射蓝色的实际 RGB 值,而当指标较低时,如何获得看起来像深蓝色的实际 RGB 值?

enter image description here

最佳答案

我建议您使用标准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

关于python - 如何获得代表反射光的色标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48030527/

相关文章:

python - 在 Windows 中安装 scipy 包

JavaScript - 如何在 Canvas 上绘图并获取跟随鼠标的图像

javascript - Canvas 不绘制图像

css - 当我改变它们的工作顺序时怎么办?

css - 如何从 SASS 中的基色中获取所需的颜色

css - 使用CSS根据继承的背景色动态计算前景色

python - python-telegram-bot 的数字键盘

python - 我应该如何处理这个 gsutil "parallel composite upload"警告?

python - 在 Python 中管理 Selenium 的多个实例

图像到 Canvas/HTML5 转换