You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Rasterio将单波段热红外GeoTIFF保存为伪彩色PNG

将单波段热红外GeoTIFF保存为伪彩色文件

方法一:保存为普通伪彩色PNG(无地理信息)

适合仅需可视化图像的场景,利用matplotlib色卡将单波段灰度值映射为RGB颜色:

import rasterio
import matplotlib.pyplot as plt
from matplotlib import cm

# 读取单波段热红外数据
with rasterio.open('2010ThermClip.tif') as src:
    gray_data = src.read(1)

# 选择色卡(可替换为viridis、inferno、magma等任意matplotlib内置色卡)
color_map = cm.get_cmap('plasma')
# 将灰度值映射为RGBA格式,剔除alpha通道
rgb_data = color_map(gray_data)[:, :, :3]
# 转换为PNG支持的uint8格式(0-255数值范围)
rgb_data = (rgb_data * 255).astype('uint8')

# 保存伪彩色PNG
plt.imsave('chicTherm2010_pseudo_color.png', rgb_data)

方法二:保存带地理信息的伪彩色GeoTIFF

需要保留原数据地理坐标时,可将伪彩色数据写入带元数据的三波段GeoTIFF:

import rasterio
from matplotlib import cm

# 读取源数据及元数据
with rasterio.open('2010ThermClip.tif') as src:
    gray_data = src.read(1)
    src_profile = src.profile

# 色卡映射并调整数据格式
color_map = cm.get_cmap('plasma')
rgb_data = color_map(gray_data)[:, :, :3]
rgb_data = (rgb_data * 255).astype('uint8')
# 转换为rasterio要求的(通道数, 高度, 宽度)格式
rgb_data = rgb_data.transpose(2, 0, 1)

# 更新元数据:通道数改为3,数据类型改为uint8
src_profile.update(
    count=3,
    dtype='uint8',
    compress='deflate'  # 可选,设置压缩方式减小文件体积
)

# 保存带地理信息的伪彩色GeoTIFF
with rasterio.open('chicTherm2010_pseudo_color.tif', 'w', **src_profile) as dst:
    dst.write(rgb_data)

注意事项

  • 色卡可自由替换:matplotlib支持数十种内置色卡,也可自定义色卡使用
  • 若原数据存在nodata值,可在映射前对该区域做特殊处理(比如设置为透明色或特定颜色)
  • 保存PNG时如需透明背景,可保留RGBA的alpha通道,调用plt.imsave时添加transparent=True参数

内容的提问来源于stack exchange,提问作者jeyre

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 06:23:09