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

如何将带透明通道的灰度PNG转换为保留透明度的热力图

带alpha通道灰度PNG转热力图解决方案

核心思路

cv2.applyColorMap()接口仅支持8位单通道/三通道图像输入,直接传入带alpha通道的多通道图像会报错。我们可以通过拆分「灰度通道」和「alpha透明通道」单独处理后再合并的方式实现需求,完全保留原图像透明度,无需依赖不支持Python3的heatmap包。

完整实现代码

import cv2
import numpy as np

# 读取带alpha通道的PNG图像,必须加cv2.IMREAD_UNCHANGED参数保留透明通道
img = cv2.imread("input.png", cv2.IMREAD_UNCHANGED)

gray = None
alpha = None
# 适配不同通道类型的输入图像
if len(img.shape) == 2:
    # 无alpha单通道灰度图
    gray = img
elif img.shape[2] == 4:
    # 四通道BGRA格式灰度图
    gray = img[:, :, 0]
    alpha = img[:, :, 3]
elif img.shape[2] == 2:
    # 两通道灰度+alpha格式
    gray = img[:, :, 0]
    alpha = img[:, :, 1]

# 可选:如果灰度值范围不是0-255,先做归一化转8位
# gray = cv2.normalize(gray, None, 0, 255, cv2.NORM_MINMAX, dtype=cv2.CV_8U)

# 对灰度通道执行热力图映射
heatmap_bgr = cv2.applyColorMap(gray, cv2.COLORMAP_JET)

# 合并回原alpha通道
if alpha is not None:
    alpha = alpha.reshape((heatmap_bgr.shape[0], heatmap_bgr.shape[1], 1))
    heatmap_result = np.concatenate((heatmap_bgr, alpha), axis=2)
else:
    heatmap_result = heatmap_bgr

# 保存结果
cv2.imwrite("heatmap_output.png", heatmap_result)

关键说明

  • 代码适配无alpha单通道灰度图、两通道灰度+alpha图、四通道BGRA灰度图三类常见输入
  • 全程未修改原alpha通道的数值,所有像素的透明度和原图完全一致
  • COLORMAP_JET原生匹配需求:最暗的像素映射为蓝色,最亮的像素映射为红色

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 22:15:03