如何在Python中制作自定义颜色映射以实现目标Coverage Count可视化
实现目标Coverage Count可视化效果
问题背景
我之前在本平台提问“coverage count”的定义,后来发现该问题更适合在信号处理平台提问并获得了正确定义,同时编写了Python代码计算coverage count。但当前使用cv2.COLORMAP_JET生成的颜色映射不符合需求,希望实现类似示例图左侧的coverage count可视化效果,现有代码如下:
non_black_pixels = np.any(piece_image != [0, 0, 0], axis=-1) # Increment the corresponding pixels in the coverage_count coverage_count[non_black_pixels] += 1 # Normalize the coverage_count matrix to the full 8-bit grayscale range (0-255) normalized_coverage_count = cv2.normalize(coverage_count, None, 0, 255, cv2.NORM_MINMAX, dtype=cv2.CV_8U) # Apply a colormap to the normalized grayscale image colorful_coverage_count = cv2.applyColorMap(normalized_coverage_count, cv2.COLORMAP_JET) # Display the colorful coverage_count image cv2.imshow("Colorful Coverage Count", colorful_coverage_count) cv2.waitKey(0) cv2.destroyAllWindows()
解决方案
方法1:使用OpenCV内置替代颜色映射
如果目标效果是低计数用冷色调(蓝/绿)、高计数用暖色调(黄/红)的柔和渐变,可以尝试OpenCV提供的其他内置颜色映射,比如:
cv2.COLORMAP_VIRIDIS:从深蓝到亮黄的自然渐变,视觉区分度好且柔和cv2.COLORMAP_PLASMA:从深蓝到亮粉的渐变cv2.COLORMAP_INFERNO:从黑到亮黄红的渐变
只需替换代码中的cv2.COLORMAP_JET为上述任意一种即可,示例:
colorful_coverage_count = cv2.applyColorMap(normalized_coverage_count, cv2.COLORMAP_VIRIDIS)
方法2:自定义颜色映射
如果内置映射不符合需求,可以手动创建自定义颜色渐变。比如构建从蓝色→绿色→黄色→红色的平滑过渡:
- 定义颜色节点(遵循OpenCV的BGR通道顺序):
# 关键颜色节点:蓝→绿→黄→红(BGR格式) color_nodes = np.array([ [255, 0, 0], # 蓝色 [0, 255, 0], # 绿色 [0, 255, 255], # 黄色 [0, 0, 255] # 红色 ], dtype=np.uint8)
- 生成完整的256色颜色映射数组:
colormap = np.zeros((256, 1, 3), dtype=np.uint8) # 拆分颜色节点的渐变区间 segments = np.linspace(0, 255, len(color_nodes)).astype(int) for i in range(len(color_nodes)-1): start_idx = segments[i] end_idx = segments[i+1] # 计算两段颜色间的渐变过渡 for j in range(start_idx, end_idx): ratio = (j - start_idx) / (end_idx - start_idx) colormap[j] = (color_nodes[i] * (1 - ratio) + color_nodes[i+1] * ratio).astype(np.uint8) # 补全最后一个颜色节点 colormap[segments[-1]] = color_nodes[-1]
- 应用自定义颜色映射:
colorful_coverage_count = cv2.applyColorMap(normalized_coverage_count, colormap)
注意事项
- OpenCV默认使用BGR通道顺序,自定义颜色时需遵循该规则,不要用RGB顺序
- 如果需要和示例图完全匹配,可以提取示例图的关键颜色节点,替换到自定义映射的
color_nodes中
内容的提问来源于stack exchange,提问作者Straw User
相关产品推荐
相关产品推荐

