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

如何将图像分割掩码叠加到原始图像,生成带彩色分割标注的可视化效果

分割掩码彩色叠加效果实现方案

问题说明

我有原始图像及其对应的分割掩码,需要实现将彩色分割标注叠加在原始图像上的效果。参考相关资料编写了如下代码,但运行后输出结果和输入的原始图像完全一致,无法得到预期效果。

import skimage.filters.rank
import skimage.morphology
import numpy as np
import cv2

# 以灰度模式读取图像,将原图转为BGR格式方便叠加彩色标注
seg  = cv2.imread('segmented.png',cv2.IMREAD_GRAYSCALE)
main = cv2.imread('main.png',cv2.IMREAD_GRAYSCALE)
main = cv2.cvtColor(main,cv2.COLOR_GRAY2BGR)

# 创建形态学操作的结构元素
selem = skimage.morphology.disk(1)

# 提取类别1和类别2的边缘掩码
# 逻辑为查找黑像素周边半径1像素内、分割值为1/2的像素点
seg1 = (skimage.filters.rank.minimum(seg,selem) == 0) & (skimage.filters.rank.maximum(seg, selem) == 1)
seg2 = (skimage.filters.rank.minimum(seg,selem) == 0) & (skimage.filters.rank.maximum(seg, selem) == 2)

main[seg1,:] = np.asarray([0, 0,   255]) # 类别1边缘标红色
main[seg2,:] = np.asarray([0, 255, 255]) # 类别2边缘标黄色

# 保存结果
cv2.imwrite('result.png',main) 

相关素材

  • 原始图像:原始图像
  • 分割掩码图像:分割掩码图像
  • 预期效果示例:预期效果示例

问题原因

  1. 原有代码逻辑仅适配分割掩码中类别取值为1、2的场景,你使用的掩码类别像素值不符合这个预设,导致seg1、seg2两个布尔掩码全部为False,没有任何像素被修改,所以输出和原图完全一致。
  2. 原有逻辑仅绘制分割区域的边缘,和你需要的整区域半透明叠加的需求不匹配。

修复后代码

import numpy as np
import cv2

# 读取图像
seg = cv2.imread('segmented.png', cv2.IMREAD_GRAYSCALE)
main = cv2.imread('main.png')

# 可先运行该行查看掩码中的所有类别值,按需调整color_map的键
# print(np.unique(seg))

# 定义类别到颜色的映射(BGR格式,为OpenCV默认通道顺序)
color_map = {
    1: [0, 0, 255],    # 红色
    2: [0, 255, 255],  # 黄色
    # 可按需添加更多类别对应的颜色
}

# 叠加透明度,取值范围0-1,数值越大彩色标注越不透明
alpha = 0.4

for class_id, color in color_map.items():
    mask = (seg == class_id)
    if not np.any(mask):
        continue
    # 生成彩色掩码层
    color_layer = np.zeros_like(main)
    color_layer[mask] = color
    # 阿尔法混合实现半透明叠加
    main[mask] = cv2.addWeighted(main[mask], 1 - alpha, color_layer[mask], alpha, 0)

# 可选功能:叠加分割边界线
# kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3,3))
# for class_id, color in color_map.items():
#     mask = (seg == class_id).astype(np.uint8)
#     edge = cv2.morphologyEx(mask, cv2.MORPH_GRADIENT, kernel)
#     main[edge == 1] = color

# 保存结果
cv2.imwrite('result.png', main)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 13:24:02