如何将SAM生成的显著性图转化为目标绿色热力图效果?
显著性热力图优化问题
我正在开展显著性图像预测工作,采用GitHub仓库marcellacornia/sam进行开发。模型输出显著性图后,我希望将其转化为叠加在原图上的热力图,尝试了以下代码,但得到的红色热力图效果未达预期,希望优化成类似目标绿色热力图的效果,附上相关图片,恳请指出问题并提供改进建议。
相关图片
- 我的结果:

- 显著性图:

- 预期结果:

- 原图:

现有实现代码
import cv2 import numpy as np image1 = cv2.imread("Source.jpeg") image2=cv2.imread("Saliency.png") heatmap = cv2.applyColorMap(image2, cv2.COLORMAP_HOT) weight = cv2.addWeighted(image1,0.5, heatmap ,0.8 ,0.3) cv2.imshow("Result",weight )
问题分析与改进建议
核心问题
- 颜色映射选错了:你用的
cv2.COLORMAP_HOT是红黄色系,和预期的绿色系完全不匹配。 - 显著性图没预处理:模型输出的显著性图可能像素值范围不是标准的0-255,直接用颜色映射会导致颜色失真;如果是三通道图,也会干扰映射效果。
- 叠加权重不合理:当前热力图权重(0.8)远高于原图(0.5),会盖掉原图细节,加上0.3的亮度偏移,整体画面偏亮。
具体改进步骤
- 换绿色系颜色映射:直接用
cv2.COLORMAP_GREEN就能得到绿色系热力图,和预期效果匹配;如果觉得默认绿色不够贴合,可以手动自定义渐变颜色表。 - 预处理显著性图:
- 先转成单通道灰度图:如果读入的显著性图是三通道,执行
image2 = cv2.cvtColor(image2, cv2.COLOR_BGR2GRAY) - 归一化到0-255范围:
image2 = cv2.normalize(image2, None, 0, 255, cv2.NORM_MINMAX, dtype=cv2.CV_8U),保证颜色映射均匀
- 先转成单通道灰度图:如果读入的显著性图是三通道,执行
- 调整叠加权重:降低热力图权重,让原图细节保留更清晰,比如设置原图权重0.7、热力图权重0.3,亮度偏移设为0:
weight = cv2.addWeighted(image1, 0.7, heatmap, 0.3, 0) - 可选增强:对显著性图做直方图均衡,突出核心显著区域:
image2 = cv2.equalizeHist(image2)
改进后的示例代码
import cv2 import numpy as np # 读取图像 image1 = cv2.imread("Source.jpeg") image2 = cv2.imread("Saliency.png") # 预处理显著性图:转灰度+归一化 if len(image2.shape) == 3: image2 = cv2.cvtColor(image2, cv2.COLOR_BGR2GRAY) image2 = cv2.normalize(image2, None, 0, 255, cv2.NORM_MINMAX, dtype=cv2.CV_8U) # 可选:增强显著区域对比度 image2 = cv2.equalizeHist(image2) # 使用绿色系颜色映射 heatmap = cv2.applyColorMap(image2, cv2.COLORMAP_GREEN) # 调整叠加权重,保留原图细节 weight = cv2.addWeighted(image1, 0.7, heatmap, 0.3, 0) cv2.imshow("Result", weight) cv2.waitKey(0) cv2.destroyAllWindows()
内容的提问来源于stack exchange,提问作者Wareesha Ali
相关产品推荐
相关产品推荐

