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

如何在Python中实现医学扫描图像与ROI图像的叠加显示?

嘿,这个需求太常见啦!用Python的图像处理库就能轻松搞定,我给你准备了两种常用的实现方案,你可以根据自己的习惯来选~

方案1:用OpenCV实现图像叠加

OpenCV是处理医学图像的常用工具,操作起来灵活度很高。

首先得先安装OpenCV:

pip install opencv-python

下面是具体代码,我默认你的ROI图像是灰度图(大部分医学ROI标注都是这种形式),如果你的ROI已经是彩色图,可以跳过灰度转彩色的步骤:

import cv2
import numpy as np

# 读取原始扫描图像和ROI图像
scan_img = cv2.imread('扫描图像.jpg')
roi_img = cv2.imread('ROI图像.jpg', 0)  # 0表示以灰度模式读取

# 把灰度ROI转换成彩色格式,方便给ROI添加醒目颜色
roi_color_mask = cv2.cvtColor(roi_img, cv2.COLOR_GRAY2BGR)
# 给ROI区域设置颜色,这里用红色(OpenCV采用BGR格式,所以红色是(0,0,255))
# 非ROI区域保持黑色,ROI区域设为红色
roi_color_mask[roi_img == 0] = [0, 0, 0]
roi_color_mask[roi_img > 0] = [0, 0, 255]

# 叠加图像,通过权重平衡原图和ROI的显示效果
# 参数分别是:原图、原图权重、ROI掩码、ROI权重、亮度调整(一般设0即可)
overlay_result = cv2.addWeighted(scan_img, 0.7, roi_color_mask, 0.3, 0)

# 可以选择显示结果或者保存到本地
cv2.imshow('扫描图+ROI叠加结果', overlay_result)
cv2.waitKey(0)  # 按任意键关闭显示窗口
cv2.destroyAllWindows()
cv2.imwrite('叠加后的图像.jpg', overlay_result)

小提示:

  • 如果两张图尺寸不一致,记得先用cv2.resize(roi_img, (scan_img.shape[1], scan_img.shape[0]))把ROI图缩放到和扫描图一样大
  • 你可以调整权重值(比如把0.7和0.3换成0.8和0.2),让原图更清晰或者ROI更突出
  • 颜色也可以随便换,比如蓝色是(255,0,0),绿色是(0,255,0)
方案2:用Pillow(PIL)实现图像叠加

如果你更习惯用Pillow这种偏向Python原生的图像处理库,也可以试试这个方案:

先安装Pillow:

pip install pillow

代码示例:

from PIL import Image, ImageDraw

# 读取图像,确保扫描图是RGB格式
scan_img = Image.open('扫描图像.jpg').convert('RGB')
roi_img = Image.open('ROI图像.jpg').convert('L')  # 转为灰度图

# 创建一个和扫描图尺寸相同的彩色掩码画布
roi_mask = Image.new('RGB', scan_img.size, (0, 0, 0))
draw = ImageDraw.Draw(roi_mask)

# 遍历ROI图像,把有内容的区域(ROI)画成红色
width, height = roi_img.size
for x in range(width):
    for y in range(height):
        if roi_img.getpixel((x, y)) > 0:
            draw.point((x, y), fill=(255, 0, 0))  # Pillow采用RGB格式,红色是(255,0,0)

# 叠加图像,alpha参数控制ROI的透明度(0=完全显示原图,1=完全显示ROI)
overlay_result = Image.blend(scan_img, roi_mask, alpha=0.3)

# 显示或保存结果
overlay_result.show()
overlay_result.save('叠加后的图像.jpg')

额外提醒:

  • 如果你的ROI是带透明通道的PNG图,那操作更简单,直接用Image.alpha_composite()就能叠加,不用自己手动画掩码
  • 遍历像素的方式对于超大图来说可能有点慢,你也可以把PIL图像转成numpy数组来处理,速度会快很多

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 08:47:54