Python自定义颜色映射的方法


前言

数据可视化的颜色映射方法在热成像、仿真模拟等诸多地方均有应用,但官方预设方案有时候和实际应用中想要的结果差异较大,常常需要自己设定想要的方案来实现;目前没有看到有人在Python中用不同库及自定义映射方案来做颜色映射效果的相关文章,遂整理记录分享下相关方法。


一、什么是颜色映射?

颜色映射(Color Mapping)是一种将数据映射到颜色空间的技术,常用于数据可视化中;通过将不同范围的数据值映射到特定的颜色,我们可以更直观地观察和理解数据的分布和特征;在编程中,颜色映射通常用于创建热力图、等高线图、伪彩色图像等。

二、OpenCV中颜色预设方案

1.引入库并获取预设方案

代码如下:

import cv2
colormaps = [attr for attr in dir(cv2) if attr.startswith('COLORMAP_')]
print(colormaps)

结果(共有22种预设方案):

['COLORMAP_AUTUMN', 'COLORMAP_BONE', 'COLORMAP_CIVIDIS', 
'COLORMAP_COOL', 'COLORMAP_DEEPGREEN', 'COLORMAP_HOT', 
'COLORMAP_HSV', 'COLORMAP_INFERNO', 'COLORMAP_JET', 
'COLORMAP_MAGMA', 'COLORMAP_OCEAN', 'COLORMAP_PARULA',
'COLORMAP_PINK', 'COLORMAP_PLASMA', 'COLORMAP_RAINBOW',
'COLORMAP_SPRING', 'COLORMAP_SUMMER', 'COLORMAP_TURBO',
'COLORMAP_TWILIGHT', 'COLORMAP_TWILIGHT_SHIFTED','COLORMAP_VIRIDIS',
'COLORMAP_WINTER']

2.官方方案展示

2.1读取图片

# 读取一张渐变图并转换为灰度图像
img = cv2.imread('D:\ColorMaptest.bmp')
gray_image = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

2.2效果展示

代码:

#创建一个figure来展示所有colormap的效果
import matplotlib.pyplot as plt
fig, axs = plt.subplots(len(colormaps) // 
### 如何在 `matplotlib` 的 `imshow` 函数中应用和调整颜色映射 #### 使用预定义的颜色映射表 为了在 `imshow` 中指定颜色映射,可以利用参数 `cmap` 并设置为内置的颜色映射名称。Matplotlib 提供了大量的预设颜色映射选项,适用于不同类型的数据展示需求。 ```python import numpy as np import matplotlib.pyplot as plt data = np.random.rand(10, 10) plt.figure() plt.imshow(data, cmap='viridis') plt.colorbar() plt.title('Heatmap with Viridis Colormap') plt.show() ``` 此段代码展示了如何通过传递字符串 `'viridis'` 到 `cmap` 参数来改变默认的颜色方案[^1]。 #### 自定义离散型颜色映射 对于特定的应用场景可能需要创建自定义颜色映射。这可以通过组合多个固定颜色实现离散化的效果: ```python from matplotlib.colors import ListedColormap colors = ['white', 'red', 'green', 'blue'] custom_cmap = ListedColormap(colors) plt.figure() plt.imshow(np.arange(100).reshape((10, 10)), cmap=custom_cmap) plt.colorbar(ticks=[0, 25, 50, 75, 99], label='Discrete intervals') plt.title('Custom Discrete Color Map') plt.show() ``` 这段脚本说明了怎样构建一个由四种不同色调构成的新颜色映射,并将其应用于图像显示之中[^3]。 #### 调整连续型颜色映射范围 当处理数值跨度较大的数据集时,合理地缩放颜色轴有助于更清晰地表达信息。可通过修改 `vmin`, `vmax` 来控制色彩梯度所对应的最小最大值区间: ```python data_large_range = np.linspace(-1e6, 1e6, num=10*10).reshape((10, 10)) plt.figure() plt.imshow(data_large_range, cmap='coolwarm', vmin=-5e5, vmax=5e5) plt.colorbar() plt.title('Scaled Continuous Color Mapping') plt.show() ``` 上述示例中的 `vmin` 和 `vmax` 设置使得即使原始数据具有非常宽泛的变化幅度,也能得到适当压缩后的视觉效果[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

花椒鱼不要鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值