小编Rap*_* H.的帖子

在 matplotlib 中生成 16 位颜色图

我想在 matplotlib 中使用 RGB颜色图为16 位深度图像着色。从技术上讲,每个通道 8 位的 3 个通道应该足以为所有 2^16 个可能的深度值具有不同的 rgb 值。

即使原始深度图像有两倍以上的值,标准颜色图“viridis”确实会产生 <1000 个不同的值。

我尝试使用大量样本创建颜色图plt.get_cmap('viridis', 2**16),但仍然不够。

一些代码来描述我正在尝试做的事情:

def depth_to_rgb(path):   
    depth_map = Image.open(path)
    pixel = np.array(depth_map)
    pixel = (pixel - np.min(pixel)) / np.ptp(pixel)
    cm = plt.get_cmap('viridis', 2**16)
    pixel_colored = np.uint8(np.rint(cm(pixel) * 255))[:, :, :3]
    return Image.fromarray(pixel_colored)
Run Code Online (Sandbox Code Playgroud)

我可以通过创建自定义 cm 来稍微增加地图中不同值的数量,但这仍然不够:

cm = mlp.colors.LinearSegmentedColormap.from_list("",
["red", "green", "yellow"], N=2**16)
Run Code Online (Sandbox Code Playgroud)

是否有具有足够值的颜色图,或者我如何创建一个颜色图?与枕头图像库相关的解决方案也很受欢迎。

编辑

显然(感谢ImportanceOfBeingErnest)生成的颜色图确实有 2**16 个值,但np.uint8(np.rint(cm(pixel) * 255))导致其中一些落在相同的颜色上。我只在结果图像中打印了不同颜色的数量。我想我必须做一个不同的映射,但原始问题得到了回答。

python matplotlib color-depth colormap

4
推荐指数
1
解决办法
1717
查看次数

标签 统计

color-depth ×1

colormap ×1

matplotlib ×1

python ×1