Colors RGB/十六进制到颜色映射值

Colors RGB/十六进制到颜色映射值,colors,rgb,colormap,color-mapping,Colors,Rgb,Colormap,Color Mapping,我想将RGB/HEX颜色转换为给定特定颜色映射的相应(标准化)数值。有许多实用程序可以执行正向操作(即使用colormap将一组规范化值映射为RGB/HEX颜色),但我还没有找到任何实现反向操作的工具 转发: > import matplotlib.cm as cm > cm.viridis([.2, .4, .6, .8, 1]) array([[ 0.253935, 0.265254, 0.529983, 1. ], [ 0.163625, 0.

我想将RGB/HEX颜色转换为给定特定颜色映射的相应(标准化)数值。有许多实用程序可以执行正向操作(即使用colormap将一组规范化值映射为RGB/HEX颜色),但我还没有找到任何实现反向操作的工具

转发:

> import matplotlib.cm as cm
> cm.viridis([.2, .4, .6, .8, 1])

array([[ 0.253935,  0.265254,  0.529983,  1.      ],
       [ 0.163625,  0.471133,  0.558148,  1.      ],
       [ 0.134692,  0.658636,  0.517649,  1.      ],
       [ 0.477504,  0.821444,  0.318195,  1.      ],
       [ 0.993248,  0.906157,  0.143936,  1.      ]])

我如何从
[0.253935,0.265254,0.529983,1.]
0.2
,当然,知道它们来自
viridis

我可以给你一个使用Matlab实现的示例(解释反向映射的原理)

如果您正在寻找Python实现,请在问题中添加Python标记

这是我的代码示例(注释中有解释):

array=[0.253935,0.265254,0.529983,1;
0.163625,  0.471133,  0.558148,  1;
0.134692,  0.658636,  0.517649,  1;
0.477504,  0.821444,  0.318195,  1;
0.993248,  0.906157,  0.143936,  1];
%c是RGB值(假定该值存在于数组中)。
c=[0.253935,0.265254,0.529983,1];
%B是映射值。
B=[.2,4,6,8,1];
%1移除alpha通道(假设所有alpha值等于1):
A=数组(:,1:3);
%2.从[0,1]范围内的标准化值转换为[0,255]范围内的定点值。
%(假设每个颜色通道是一个字节)。
A=圆形(A*255);
%3.将RGB三元组转换为单定点值(24位整数)。
%备注:为了获得最佳性能,您可以创建一个查找表(映射所有可能组合的16MB查找表)。
%备注:您还可以创建字典。
A=A(:,1)+A(:,2)*2^8+A(:,3)*2^16;
%4.对c进行相同的转换:
c=圆形(c*255);
c=c(1)+c(2)*2^8+c(3)*2^16;
%5.在A中查找c的索引:
%备注:如果A已排序,则可以使用二进制搜索。
%备注:如果是查找表(或字典),您可以使用类似idx=A(c)的内容。
idx=find(A==c);
%6.结果是B就地idx:
反向_val=B(idx)
结果:

reverse_val =

    0.2000

在Python中,您可能会找到一个快捷方式,如:转换为字符串、构建字典(从字符串到索引或到值)