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

灰度图像添加彩色蒙版异常求助:组织区域变黑且蒙版无透明度

解决MRI图像叠加蒙版的异常问题

问题根源分析

  • 组织区域变黑:原代码对整个图像执行全局加权叠加,非蒙版区域的黑色蒙版([0,0,0])会拉低原MRI图像的像素值,导致正常组织区域被不必要地变暗甚至变黑。
  • 红色蒙版无透明效果:全局加权没有精准控制蒙版区域的透明度,且非蒙版区域的修改干扰了蒙版的视觉效果。

修正后的代码

import cv2
import numpy as np

# 读取灰度MRI图像和蒙版图像
mri_image = cv2.imread('mri_image.png', cv2.IMREAD_GRAYSCALE)
mask_image = cv2.imread('mask_image.png', cv2.IMREAD_GRAYSCALE)

# 将灰度图转为RGB格式
mri_image_rgb = cv2.cvtColor(mri_image, cv2.COLOR_GRAY2RGB)

# 创建红色蒙版,仅在目标区域标记红色
colored_mask = np.zeros_like(mri_image_rgb)
colored_mask[mask_image > 0] = [255, 0, 0]

# 方案1:仅在蒙版区域执行加权叠加,保留非蒙版区域原样
overlayed_image = mri_image_rgb.copy()
overlayed_image[mask_image > 0] = cv2.addWeighted(
    mri_image_rgb[mask_image > 0], 0.7,
    colored_mask[mask_image > 0], 0.3,
    0
)

# 方案2:用addWeighted的mask参数直接指定生效区域(更简洁)
# overlayed_image = cv2.addWeighted(mri_image_rgb, 1, colored_mask, 0.3, 0, mask=mask_image)

cv2.imwrite('overlayed_image.png', overlayed_image)

关键修改说明

  1. 精准区域叠加:只对蒙版覆盖的区域执行加权操作,非蒙版区域完全保留原MRI图像的灰度信息,彻底解决组织区域变黑的问题。
  2. 正确透明效果:通过限定叠加范围,红色蒙版的0.3权重(透明效果)仅作用于目标区域,视觉上符合预期。

额外排查点

  • 确认蒙版图像读取正确:用cv2.imshow('mask', mask_image)查看蒙版的白色区域是否对应目标组织,黑色为背景。
  • 若MRI图像是16位深度(医学图像常见),需先归一化到8位再转RGB,否则会出现颜色异常:
    # 处理16位MRI图像
    mri_image = cv2.imread('mri_image.png', cv2.IMREAD_UNCHANGED)
    mri_image_8bit = cv2.normalize(mri_image, None, 0, 255, cv2.NORM_MINMAX, dtype=cv2.CV_8U)
    mri_image_rgb = cv2.cvtColor(mri_image_8bit, cv2.COLOR_GRAY2RGB)
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 12:45:15