栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

范围值到伪彩色

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

范围值到伪彩色

您可以编写自己的函数,将值转换为0…100→0…120度,然后将该值用作HSV(或HLS)色空间中颜色的H(或角度)。然后可以将其转换为RGB颜色以用于显示目的。在此颜色空间中计算线性解释的颜色时,它们通常看起来更好:这是HSV颜色空间的样子:

更新:

好消息,我惊讶地发现Python在其内置

colorsys
模块中具有色彩空间转换例程(它们实际上表示“包括电池”)。这样做的好处是,它使创建一个实现我所描述的功能非常容易的函数,如下所示:

from colorsys import hsv_to_rgbdef pseudocolor(val, minval, maxval):    """ Convert val in range minval..maxval to the range 0..120 degrees which        correspond to the colors Red and Green in the HSV colorspace.    """    h = (float(val-minval) / (maxval-minval)) * 120    # Convert hsv color (h,1,1) to its rgb equivalent.    # Note: hsv_to_rgb() function expects h to be in the range 0..1 not 0..360    r, g, b = hsv_to_rgb(h/360, 1., 1.)    return r, g, bif __name__ == '__main__':    steps = 10    print('val       R      G      B')    for val in range(0, 100+steps, steps):        print('{:3d} -> ({:.3f}, {:.3f}, {:.3f})'.format(    val, *pseudocolor(val, 0, 100)))

输出:

val       R      G      B  0 -> (1.000, 0.000, 0.000) 10 -> (1.000, 0.200, 0.000) 20 -> (1.000, 0.400, 0.000) 30 -> (1.000, 0.600, 0.000) 40 -> (1.000, 0.800, 0.000) 50 -> (1.000, 1.000, 0.000) 60 -> (0.800, 1.000, 0.000) 70 -> (0.600, 1.000, 0.000) 80 -> (0.400, 1.000, 0.000) 90 -> (0.200, 1.000, 0.000)100 -> (0.000, 1.000, 0.000)

这是显示其输出结果的示例:

我认为您可能会发现生成的颜色比我的其他答案更好。

概括:

可以将此功能修改为更通用一些,因为它可以使用除当前已硬编码到其中的红色和绿色以外的其他颜色。

这样做的方法如下:

def pseudocolor(val, minval, maxval, start_hue, stop_hue):    """ Convert val in range minval..maxval to the range start_hue..stop_hue        degrees in the HSV colorspace.    """    h = (float(val-minval) / (maxval-minval)) * (stop_hue-start_hue) + start_hue    # Convert hsv color (h,1,1) to its rgb equivalent.    # Note: hsv_to_rgb() function expects h to be in the range 0..1 not 0..360    r, g, b = hsv_to_rgb(h/360, 1., 1.)    return r, g, bif __name__ == '__main__':    # angles of common colors in hsv colorspace    RED, YELLOW, GREEN, CYAN, BLUE, MAGENTA = range(0, 360, 60)    steps = 10    print('val       R      G      B')    for val in range(0, 100+steps, steps):        print('{:3d} -> ({:.3f}, {:.3f}, {:.3f})'.format(     val, *pseudocolor(val, 0, 100, YELLOW, BLUE)))

结果:



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/659972.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号